for 循环中的 Java Thread.sleep()

标签 java swing timer sleep

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

}

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

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

最佳答案

您永远不应该在 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();

关于for 循环中的 Java Thread.sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938644/

相关文章:

java - 如何在 Dropwizard 中的测试类中初始化包

java - Hibernate - Java分页 - 内存不足异常

java - 如何使用 jFrame 将文件的一部分加载到 Java 中的 ArrayList 中?

java - 旋转图像(将其恢复到原始位置)

python - 每 N 秒调用 2 个 python 函数

javascript - 应用程序在后台时 setInterval 函数不运行

java - 邻接矩阵删除顶点

java - 如何使用 NetBeans 将 Macos DMG 默认图标转换为自定义图标?

c++ - 在不手动创建线程的情况下定期调用 C 函数

java - 自动化/处理第 5 个下拉列表 url https ://jedwatson. github.io/react-select/named as Github users(Aysnc with fetch.js)