for循环中的Java Thread.sleep()

use*_*657 2 java swing sleep timer

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));
    }

}
Run Code Online (Sandbox Code Playgroud)

我要做的是播放listData ArrayList类型,该类型是从ascii JTextArea复制的.它应该是一个动画,所以当它们点击播放时,该功能会显示第一张幻灯片,等待一秒钟,然后是下一张幻灯片等.

当我运行它时,唯一发生的事情是暂停,屏幕上没有任何变化,直到它只显示最终幻灯片.我不确定它有什么问题

Hov*_*els 6

Thread.sleep(...)除非你的目标是让整个应用程序进入休眠状态,否则你永远不应该调用Swing事件线程.相反,摆脱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();
Run Code Online (Sandbox Code Playgroud)