我有一个继承自Thread的类DataThread
。
我使用了两个DataThread
个对象ReadThread
和WriteThread
。
我有另一个运行Main_GUI
的线程。
现在,当我按下main_GUI
上的按钮时,它会调用方法x.method1()
,然后此方法使用WriteThread方法WriteThread.sleepForReset()。在
public void sleepForReset(){
try {
sleep(28000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
当我按下main_GUI
上的按钮时,GUI停止28000
毫秒。
如果我在WriteThread
呼叫睡眠,那么为什么它会暂停main_GUI
?
是因为睡眠是一种静态的方法吗?如果是,是否有人可以建议如何在不影响WriteThread
的情况下睡眠Main_GUI
?
答案 0 :(得分:6)
如果您从WriteThread.sleepForReset()
方法中调用actionPerformed
,则实际上是在EventDispatch线程中调用它。即使你有一个代表你的WriteThread的对象,从EventDispatch线程中调用该对象上的方法将导致该进程在EDT中执行。
在Java中使用工作线程看一下this tutorial。请注意,只有一个继承自Thread
的类是不够的,您需要启动这些Thread的实例才能拥有多线程应用程序。提供的教程将为您提供一个入门方法的好主意。
答案 1 :(得分:1)
我认为召唤Geeks并不一定是获得帮助的好方法,但是为了回答你的问题,你会看到睡眠,因为你在事件调度线程上调用了Thread.sleep。 Swing的GUI操作在这个单线程上运行。如果您需要长时间运行后台工作,则应将其委派给SwingWorker。
此外,中断异常的处理不是很强大。至少,你应该用Thread.currentThread()。interrupt()重新打断线程。
答案 2 :(得分:-1)
感谢各位建议我不同的选择..... 但是我使用了TimeTask.schedule()并且工作了。我安排了我的工作,而不是在当前的线程中使用sleep ......