我有一個GUI程序,需要打開一個單獨的窗口並等待用戶選擇並選擇,然後繼續。我想我應該用wait()和notify()方法來做這件事,但我仍然試圖弄清楚如何使用這些。一個複雜的因素是,當第二個窗口在actionPerformed()方法中創建時,情況似乎有所不同。如何暫停程序的執行,直到在Java Swing中單擊按鈕爲止
以下是我認爲它應該是在這裏完成,顯然這是不完全正確......
這應該創建一個窗口有一個按鈕,當按下按鈕時,應創建一個按鈕,另一個窗口,當按下該按鈕時,程序應打印「結束」。
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 ..? – Bozho 2009-12-06 22:45:24
換句話說 - 不要將你的問題發佈爲社區wiki,除非你有理由 - http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-堆棧溢出在這裏你可以找到'社區wiki'的描述 – Bozho 2009-12-06 23:04:57