2013-10-25 66 views
0

我有一个类创建一个JFrame,并且需要在JFrame中显示一个图像。图像必须每隔几秒旋转一次。更新JPanel/JFrame不工作

我试过在JFrame和JPanel上使用repaint(),revalidate()和validate(),并且都没有任何效果。以下是我目前的代码来更新JFrame/JPanel。此代码将等待4秒钟,然后显示第四个图像,但我希望它每秒更新一次新图像。

public void startSlideshow(){ 
int i = 0; 
Long oldTime = System.currentTimeMillis(); 
do { 
    Long currentTime = System.currentTimeMillis(); 
    if(currentTime - oldTime >= 1000) { 
     img = new JLabel(new ImageIcon("Albums/" + album + "/" + imageNames.get(i))); 
     panel.removeAll(); 
     panel.setBackground(Color.BLACK); 
     panel.add(img); 
     panel.revalidate(); 
     panel.repaint(); 
     i++;   
     oldTime = System.currentTimeMillis(); // reset reference time 
} 
} while(i<imageNames.size()); 

panel.removeAll(); 
panel.setBackground(Color.BLACK); 
panel.add(img); 
panel.getRootPane().revalidate(); 
panel.repaint(); 
} 

任何帮助是非常感谢,因为我一直在敲我的头一阵子。谢谢。

+0

即使这样做,它会是一个灾难,因为你正在使用一个忙等待循环。 D: – Boann

+0

@Boann这不起作用,在这次灾难发生之前我已经尝试过10个不同的版本。谢谢。 – user2907236

+0

你在哪里管理1秒等待? –

回答

2

您正在阻止事件分派线程,阻止它处理新的重新绘制请求。

而不是使用一个循环,并Thread.sleep的,请尝试使用javax.swing.Timer

看看How to Use Swing TimersConcurrency in Swing

您还可以找到更简单改变的,而不是创建一个新的JLabelJLabel的图标在每一次...