繁体   English   中英

for循环中的Java Thread.sleep()

[英]Java Thread.sleep() within a for loop

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复制的。 它应该是动画,因此当他们点击播放时,该功能将显示第一张幻灯片,等待第二张,然后显示下一张幻灯片,依此类推。

当我运行此命令时,唯一发生的事情是暂停,屏幕上的任何内容都没有改变,直到仅显示最后一张幻灯片为止。 我不确定这是怎么回事

除非您的目标是使整个应用程序进入睡眠状态,否则将使它变得无用,否则切勿在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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM