【发布时间】:2012-03-24 16:31:19
【问题描述】:
我正在尝试:
- 在 jLabel 中显示文本,
- 等待两秒钟,
- 然后在 jLabel 中写一个新文本
这应该很简单,但我遇到了一个奇怪的错误: 第一个文本永远不会写入,应用程序只需等待 2 秒,然后显示最终文本。这是示例代码:
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {
displayLabel.setText("Clicked!");
// first method with System timer
/*
long t0= System.currentTimeMillis();
long t1= System.currentTimeMillis();
do{
t1 = System.currentTimeMillis();
}
while ((t1 - t0) < (2000));
*/
// second method with thread.sleep()
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {}
displayLabel.setText("STOP");
}
使用此代码,文本“Clicked!”从不显示。我只有 2 秒 - 暂停,然后是“停止”文本。 我尝试将系统计时器与循环或 Thread.sleep() 一起使用,但两种方法都给出了相同的结果。
【问题讨论】:
-
(叹气)不要阻塞 EDT(事件调度线程)。而不是调用
Thread.sleep(n)实现 SwingTimer或使用SwingWorker来执行长时间运行的任务。有关详细信息,请参阅Concurrency in Swing。
标签: java swing concurrency