簡體   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