【发布时间】:2013-11-25 12:36:54
【问题描述】:
for (do something in) {
TextArea.append("Text here");
//break for one second
}
我的问题是我怎样才能休息一秒钟并直接在 textarea 上显示而不是同时显示所有内容?
【问题讨论】:
for (do something in) {
TextArea.append("Text here");
//break for one second
}
我的问题是我怎样才能休息一秒钟并直接在 textarea 上显示而不是同时显示所有内容?
【问题讨论】:
暂停执行一秒可以用
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) 更新它。
【讨论】:
TextArea.append("Text here"); 中有一大段文字。在这种情况下,您需要手动将文本分成块并在每个循环中输出每个块。
要中断一秒钟,你必须使用 Thread 类的 sleep(1000) 方法,而要实现多线程,你必须重写 run 方法并扩展 Thread 类
【讨论】:
如果您的 TextArea.append 调用没有在 swing 线程中发生,它可能会同时显示。下面的块请求swing线程执行runnable中的代码,阻塞当前线程直到它完成。然后我们进行 1 秒睡眠
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);
}
【讨论】: