代码之家  ›  专栏  ›  技术社区  ›  Surjya Narayana Padhi

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

  •  -1
  • Surjya Narayana Padhi  · 技术社区  · 15 年前

    我只有一节课 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();
        }
    }
    

    当我按下按钮时 主控图形用户界面 贵摊位 28000 毫秒。 如果我叫你睡觉 写入线程 那为什么它停止了 主控图形用户界面 ? 是因为睡眠是一种静态的方法吗?如果是,有人能建议如何睡 写入线程 不影响 主控图形用户界面 ?

    3 回复  |  直到 15 年前
        1
  •  6
  •   akf    15 年前

    如果你打电话来 WriteThread.sleepForReset() 从你的内心 actionPerformed 方法,实际上是从eventDispatch线程中调用它。即使您有一个表示writethread的对象,但从eventdispatch线程中调用该对象的方法将导致在edt中执行该进程。

    看一看 this tutorial 在Java中使用工作线程。注意,仅仅有一个继承自 Thread ,您需要启动这些线程的实例才能拥有多线程应用程序。提供的教程将为您提供一个开始学习的好主意。

        2
  •  1
  •   Jeff Storey    15 年前

    我认为给人打电话不一定是寻求帮助的好方法,但是要回答你的问题,你看到的是睡眠,因为你在事件调度线程上调用thread.sleep。swing的gui操作运行在这个单线程上。如果你需要做长期的背景工作,你应该把它委托给一个骗子。

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

        3
  •  -1
  •   Surjya Narayana Padhi    15 年前

    谢谢你们给我不同的建议… 但我使用了timetask.schedule()并开始工作。我把工作安排在以后,而不是在当前线程中使用sleep……