2010-01-08 79 views
-1

我有一个类继承自线程DataThread。 我正在使用两个DataThread对象ReadThreadWriteThread。 我有另一个线程,其中Main_GUI正在运行。在当前线程上调用睡眠暂停我的主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_GUI28000毫秒的GUI摊位。 如果我在WriteThread上呼叫睡眠,那么为什么它会暂停main_GUI? 是因为睡眠是一种静态方法吗?如果是的话,任何人都可以建议如何在不影响Main_GUI的情况下入睡WriteThread

回答

-1

感谢你们所有人提出我不同的选择..... 但我用TimeTask.schedule()和工作。我后来安排了我的工作,而不是在当前线程中使用睡眠......

1

我认为叫人Geeks不一定是获得帮助的好方法,但要回答你的问题,你会看到睡眠,因为你在事件派发线程上调用Thread.sleep。 Swing的GUI操作在这个单线程上运行。如果您需要长时间运行后台工作,则应将其委派给SwingWorker。

此外,中断异常的处理不是很健壮。至少,你应该用Thread.currentThread()。interrupt()来重新打断线程。

+0

感谢您的建议....... 我永远不会在我生命中给任何人“怪胎”打电话...... 但我能做什么?我绝望的帮助...... :) – 2010-01-08 05:43:44

6

如果您从actionPerformed方法中调用WriteThread.sleepForReset(),实际上是从EventDispatch线程中调用它。即使你有一个代表WriteThread的对象,在EventDispatch Thread中调用该对象的方法也会导致该过程在EDT内执行。使用Java中的工作线程看看this tutorial。请注意,仅仅拥有继承自Thread的类是不够的,您需要启动这些线程的实例才能让您拥有多线程应用程序。所提供的教程将为您提供一个开始入门的好方法。