![](/img/trans.png)
[英]How to pause program execution without blocking a Timer (Java Swing)?
[英]How to pause execution of a program until a button is clicked in Java Swing
我有一個帶有GUI的程序,需要打開一個單獨的窗口並等待用戶選擇和選擇,然后繼續。 我認為我應該使用wait()和notify()方法來執行此操作,但是我仍在嘗試弄清楚如何使用它們。 一個復雜的因素是,當第二個窗口在actionPerformed()方法中創建時,事情似乎有所不同。
我認為這是應該在這里完成的方式,顯然這不太正確...
這應該創建一個帶有按鈕的窗口,當按下按鈕時,應該創建另一個帶有按鈕的窗口,並且當按下該按鈕時,程序應該打印“ End”。
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方法創建窗口時才會發生這種情況。
不,您應該只使用JDialog 。
您需要一個模式對話框窗口。 這里是對話框的教程。 對於簡單情況,使用JOptionPane
會更容易。
對話框可以是模式對話框。 當模式對話框可見時,它將阻止用戶輸入程序中的所有其他窗口。
正如其他兩個答案所示,您需要一個模式JDialog。 您不需要處理任何線程類。 一旦處理了用戶輸入,JDialog窗口將處理您的控制權。 您可以通過幾種方法來設置對話框模式。 這是兩個例子。
new JDialog(Dialog owner, boolean modal)
要么
new JDialog(Dialog owner, String title, boolean modal)
您還可以執行以下操作:
JDialog dialog = new JDialog(owner);
dialog.setModal(true);
我認為這是一篇有關JAVA模態的不錯的文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.