【问题标题】:Java Thread.sleep() within a for loopfor 循环中的 Java Thread.sleep()
【发布时间】:2015-01-12 08:31:32
【问题描述】:
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 复制的。它应该是一个动画,所以当他们点击播放时,该功能会显示第一张幻灯片,等待一秒钟,然后是下一张幻灯片,等等。

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

【问题讨论】:

    标签: java swing timer sleep


    【解决方案1】:

    你不应该在 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();
    

    【讨论】:

    • 我只能说你的用户名和头像太棒了。你的答案也是如此,所以 +1。
    猜你喜欢
    • 2012-11-19
    • 2020-10-24
    • 1970-01-01
    • 2015-03-21
    • 2012-02-06
    • 1970-01-01
    • 2019-06-20
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多