java - 如何在继续 Java 中的另一个线程之前等待一个线程做某事?
问题描述
我有一个名为 Welcome 的图形用户界面,使用 JFormDesigner 创建。我想等到单击该表单上的按钮后再继续我的申请。
我正在使用synchronized
GUI 并将其实例化为要等待的对象来执行此操作。
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");
但是按下按钮后,应用程序退出并且不显示输出。如何等待按钮被正确按下?
解决方案
我设法弄清楚了,我需要等待Welcome.class
实例并通知this
在第二个线程上使用。
主线程:
Welcome gui = new Welcome();
syncronized(gui) { gui.wait(); }
第二个线程:
private void onStart() {
syncronized(this) { notifyAll(); }
dispose();
}
推荐阅读
- firebase - firebase 登录用户是否被视为并发用户?
- javascript - 反应路由不起作用v4
- mysql - How do I include table names in a MySQL query?
- python - 在 Pandas DataFrame 的日期列上使用 numpy is_busday 函数
- php - ApiCommand.php 在 laravel 中是如何工作的?
- python - 是否有一种有效的方法可以使用 python(并避免使用开发工具)为 selenium 挖掘 html 元素。如果这可以用 BeautifulSoup 来完成,怎么做?
- python - 如何在谷歌合作实验室的笔记本上运行 nbconvert
- recursion - 递归函数似乎不起作用
- javascript - 检查 `Drawer` 的渲染方法。元素类型无效错误
- c - 为什么我追回一个字符串的反汇编地址时会有一堆0