首页 > 解决方案 > 如何在继续 Java 中的另一个线程之前等待一个线程做某事?

问题描述

我有一个名为 Welcome 的图形用户界面,使用 JFormDesigner 创建。我想等到单击该表单上的按钮后再继续我的申请。

我正在使用synchronizedGUI 并将其实例化为要等待的对象来执行此操作。

synchronized(new Welcome()) {
    wait();
}

在我的 GUI 内部,我有一个开始按钮,单击它会运行:

public void startScript() {
    synchronized(this) {
        notify();
    }

    // Close the GUI
    dispose();
}

GUI成功加载但是,我收到此错误:

java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:502) at dtohh.main.Main.(Main.java: 20) 在 dtohh.tests.Tests.main(Tests.java:11)

在我什至可以按下我的 GUI 上的开始按钮之前。然后当我按下按钮时,脚本结束并且什么也不做。

我添加了这个来测试它是否正常工作:

synchronized(new Welcome()) {
    wait();
}

System.out.println("Test");

但是按下按钮后,应用程序退出并且不显示输出。如何等待按钮被正确按下?

标签: javawaitsynchronizednotify

解决方案


我设法弄清楚了,我需要等待Welcome.class实例并通知this在第二个线程上使用。

主线程:

Welcome gui = new Welcome();
syncronized(gui) { gui.wait(); }

第二个线程:

private void onStart() {
    syncronized(this) { notifyAll(); }
    dispose();
}

推荐阅读