【发布时间】:2009-12-07 08:40:36
【问题描述】:
我有一个带有 GUI 的程序需要打开一个单独的窗口并等待用户选择和选项,然后继续。我想我应该用 wait() 和 notify() 方法来做这件事,但我仍在试图弄清楚如何使用它们。一个复杂的因素是,当在 actionPerformed() 方法中创建第二个窗口时,事情似乎有所不同,这是必须的。
这里是我觉得应该怎么做的,显然不太对……
这应该创建一个带有按钮的窗口,当按下按钮时,应该创建另一个带有按钮的窗口,当按下该按钮时,程序应该打印“结束”。
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class WtfExample {
public static void main(String[] args) {
JFrame jf = new JFrame();
JButton butt = new JButton("Button");
butt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
WtfExample we = new WtfExample();
we.display();
}
});
jf.getContentPane().add(butt);
jf.setSize(new Dimension(1000, 500));
jf.setVisible(true);
System.out.println("End");
}
public synchronized void display() {
JFrame jf = new JFrame();
JButton butt = new JButton("Button");
butt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
synchronized(WtfExample.this) {
WtfExample.this.notifyAll();
}
}
});
jf.getContentPane().add(butt);
jf.setSize(new Dimension(1000, 500));
jf.setVisible(true);
while(true) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
}
}
编辑-我在一件事情上不够清楚-打开的第二个窗口是空白的,就像它的组件从未添加到其中一样。无论是框架还是对话框都是如此,但只有当窗口是从 actionPerformed 方法创建时才会发生。
【问题讨论】:
-
换一种说法 - 不要将您的问题发布为社区 wiki,除非您有理由这样做 - meta.stackexchange.com/questions/11740/… 在这里您可以找到“社区 wiki”的描述
标签: java multithreading