-1

我有一个DataThread从 Thread 继承的类。我正在使用两个DataThread对象ReadThreadWriteThread. 我有另一个线程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_GUIGUI 上的按钮时,会停顿28000几毫秒。如果我打电话给 sleepWriteThread那么为什么它会停止main_GUI?是因为 sleep 是静态方法吗?如果是的话,有人可以建议如何在WriteThread不影响的情况下睡觉Main_GUI吗?

4

3 回答 3

6

如果您WriteThread.sleepForReset()从您的actionPerformed方法中调用,您实际上是从 EventDispatch 线程中调用它。即使您有一个代表您的 WriteThread 的对象,从 EventDispatch 线程中调用该对象上的方法也会导致该进程在 EDT 中执行。

看看这个在 Java 中使用工作线程的教程。请注意,仅拥有一个继承自 的类是不够的Thread,您需要启动这些线程的实例才能拥有多线程应用程序。提供的教程将为您提供一种入门方法的好主意。

于 2010-01-08T03:07:37.617 回答
1

我认为打电话给 Geeks 不一定是获得帮助的好方法,但要回答你的问题,你会看到睡眠,因为你在事件调度线程上调用 Thread.sleep。Swing 的 GUI 操作在这个单一线程上运行。如果你需要做长时间运行的后台工作,你应该把它委托给一个 SwingWorker。

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

于 2010-01-08T03:06:48.617 回答
-1

感谢大家向我建议不同的选择.....但是我使用了 TimeTask.schedule() 并且工作了。我将我的工作安排在以后,而不是在当前线程中使用睡眠......

于 2010-01-08T05:41:48.930 回答