2013-11-25 75 views
0
for (do something in) { 
TextArea.append("Text here"); 
//break for one second 
} 

我的問題是我該如何中斷一秒鐘,並直接顯示在textarea上,而不是在同一時間?Java TextArea更新

回答

0

暫停執行一秒可以用

Thread.sleep(1000); 

可以做到,但你應該通過捕捉可能InterruptedException

try 
{ 
    Thread.sleep(1000); 
} 
catch(InterruptedException e) 
{ 
System.out.println(e.getMessage()); 
} 

你也應該更改GUI組件

EventQueue.invokeLater(new Runnable(){ 
    public void run() 
    { 
    //make gui change here 
    } 
}); 

這從AWT GUI事件調度線程(EDT)更新它。

+0

我知道,你可以使用,但隨後仍然顯示這一切在同一時間 – Pay4yourlife

+0

然後我假設你有文字的'TextArea.append一大塊( 「文字在這裏」);'。在這種情況下,您需要手動將文本分解爲塊,並在每個循環中輸出一個塊。 –

+0

修好了,謝謝! – Pay4yourlife

0

對於突破僅一個第二,你必須使用睡眠(1000)Thread類,並實現多線程,你的方法必須重寫run方法和擴展Thread類

0

它可能如果可以一次顯示所有TextArea.append調用不在swing線程中發生。下面的塊請求擺動線程執行可運行的代碼,阻塞當前線程直到完成。然後,我們做我們的第一秒的睡眠

final JTextArea someArea = new JTextArea(); 

    try { 
     SwingUtilities.invokeAndWait(new Runnable() { 

      public void run() { 
       someArea.append("Some text"); 
      } 
     }); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (InvocationTargetException ex) { 
     Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); 
    }