如何解决Thread.sleep暂停整个程序
| 我有一个带有按钮的主窗体,当按下该窗体时,应该启动一个新的倒数计时器线程。 这是按钮的动作侦听器中的代码: Counter c = new Counter(timetoFinish);
这是Counter类的代码:
class Counter implements Runnable {
int waitingTime = 0;
Thread myCounter = new Thread(this);
public Counter(int waitingTime)
{
this.waitingTime = waitingTime;
myCounter.run();
}
public void run(){
//Start countdown:
do
{
waitingTime -= 1;
try {
Thread.sleep(1000);
System.out.println(waitingTime);
} catch (InterruptedException e) {
e.printstacktrace();
}
} while (waitingTime >= 0);
}
}
问题是,当我创建Counter类的新实例时,它会暂停整个程序,而不仅仅是那个线程!问题必须出在\“ Thread.sleep \”。
解决方法
因为您是直接调用run方法。
相反,您应该将其包装在Thread中并启动该线程。
例如,更换
myCounter.run();
通过
new Thread(this).start();
,只是因为您从Counter
构造函数调用了run
方法。那不是它与线程一起工作的方式。您必须删除此调用,将Runnable
包装在Thread
实例中,然后在线程上调用start()
:
new Thread(new Counter(2)).start();
,您实际上并没有多线程(8)。
像其他任何普通函数一样,Thread.run()
方法仅运行与线程关联的代码。它不会启动单独的线程。
您需要调用ѭ12来启动一个新线程并在其中运行代码。
,您应该使用线程的“ 8”方法。采用
c.start();
否则,您将拥有一个类,并且正在调用其方法之一,并且该类当然在主线程中运行并且使主线程处于休眠状态。
,您直接调用run,它将在当前线程中运行,并休眠当前线程,我猜这是事件线程。这会导致程序中的暂停。
,您应该使用SwingUtilities类
看到
http://www.java2s.com/Code/Java/Threads/InvokeExampleSwingandthread.htm
// Report the result using invokeLater().
SwingUtilities.invokeLater(new Runnable() {
public void run() {
resultLabel.setText(\"Ready\");
setEnabled(true);
}
});
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。