2014-11-14 90 views
2
public void playPanel() throws IOException{ 

    for(int i = 0; i<listData.size(); i++){ 
     try { 
      Thread.sleep(1000L); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     ascii.setText(listData.get(i)); 
    } 

} 

我想要做的就是播放listData ArrayList类型,它是从ascii JTextArea中复制的。它应该是一个动画,所以当他们点击播放功能显示第一张幻灯片,等待一秒钟,然后下一张幻灯片等。for循环中的Java Thread.sleep()

当我运行这个唯一发生的事情是一个暂停没有屏幕变化,直到它只显示最后一张幻灯片。我不确定它有什么问题

回答

6

除非您的目标是让整个应用程序进入睡眠状态,否则无法在Swing事件线程上调用Thread.sleep(...)。相反,摆脱for循环,并使用Swing Timer“循环”。事情是这样的应该工作,或者接近一个正常运作的溶液(警告:代码尚未编制,也没有测试):

int delay = 1000; 
new Timer(delay, new ActionListener() { 
    private int i = 0; 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    if (i < listData.size()) { 
     ascii.setText(listData.get(i)); 
    } else { 
     ((Timer) e.getSource()).stop(); 
    } 
    i++; 
    } 
}).start(); 
+0

我不得不说,你的用户名和图片都光荣。你的答案也是如此,所以+1。 – AdamMc331 2014-11-14 20:54:14

+0

真棒,将标记为答案在3分钟。谢谢。 – user3562657 2014-11-14 21:02:56

+0

@ user3562657:不客气! – 2014-11-14 21:18:32