Java 在当前线程上调用sleep会暂停我的主GUI

Java 在当前线程上调用sleep会暂停我的主GUI,java,user-interface,multithreading,halt,Java,User Interface,Multithreading,Halt,我有一个类DataThread继承自Thread。 我正在使用两个DataThread对象ReadThread和WriteThread。 我有另一个线程运行Main\u GUI 现在,当我按下main\u GUI上的按钮时,它调用一个方法x.method1(),然后这个方法使用WriteThread方法WriteThread.sleepForReset()。在 当我按下main\u GUI上的按钮时,GUI将暂停28000毫秒。 如果我在WriteThread上调用sleep,那么为什么它会停止

我有一个类
DataThread
继承自Thread。 我正在使用两个
DataThread
对象
ReadThread
WriteThread
。 我有另一个线程运行
Main\u GUI

现在,当我按下
main\u GUI
上的按钮时,它调用一个方法
x.method1()
,然后这个方法使用WriteThread方法WriteThread.sleepForReset()。在

当我按下
main\u GUI
上的按钮时,GUI将暂停
28000
毫秒。 如果我在
WriteThread
上调用sleep,那么为什么它会停止
主GUI

是因为睡眠是一种静态的方法吗?如果是,有人能建议如何在不影响
Main\u GUI
的情况下睡眠
WriteThread
吗?

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


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

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


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

谢谢大家给我提出不同的选择。。。。。
但我使用了TimeTask.schedule()并进行了工作。我将我的工作安排在以后,而不是在当前线程中使用睡眠……

感谢您的建议。。。。。。。在我的生活中,我永远不会叫任何人“极客”。。。但是我能做什么呢?我非常需要帮助……:)
public void sleepForReset(){
    try {
        sleep(28000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}