我想要以JFrame的形式加載圖像,使其看起來像是視頻。
更改圖像,如看起來像視頻
對於我以爲我會改變的圖像,以便更快(20張/秒)。
,但問題是,當新的圖像獲取加載其顯示全黑的窗口。
我不知道爲什麼會發生。
建議我在哪裏出錯了。
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.io.*;
import javax.imageio.ImageIO;
class VideoI extends JPanel {
private Image img;
private Graphics graphics;
ImageIcon icon;
VideoI(){
icon=new ImageIcon("D:\\Videos\\1.jpg");
add(icon);
}
public void paintComponent(Graphics g) {
graphics=g;
repeatImgs();
}
public void repeatImgs(){
for(int i=0;i<25;i++)
{ try{
img=ImageIO.read(new File("D:\\Videos\\"+i+".jpg"));
graphics.drawImage(img, 0, 0, null);
System.out.println(""+i);
Thread.sleep(1000);
}catch(Exception e){System.out.println(""+i+":"+e);}
}
}
}
public class Video extends JFrame
{
public static void main(String args[])
{
new Video().start();
}
public void start()
{
VideoI panel = new VideoI();
add(panel);
setVisible(true);
setSize(1300,800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
1)不要阻塞EDT(Event Dispatch Thread) - 當發生這種情況時GUI將「凍結」。而不是調用'Thread.sleep(n)'實現一個Swing'Timer'來重複執行任務,或者一個'SwingWorker'執行長時間運行的任務。有關更多詳細信息,請參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 2)不要試圖加載循環中的圖像。 3)'graphics.drawImage(img,0,0,null);'應該是'graphics.drawImage(img,0,0,this);'4)對代碼塊使用一致的邏輯縮進。代碼的縮進旨在幫助人們理解流程。 –
對不起,因爲我寫錯了代碼。
我沒有得到你的第二點。你能建議我可以做什麼,而不是使用for循環? –
對點2的修復基本上是在構造函數中加載圖像,並簡單地將它們保存在數組或類似結構中。 –