【发布时间】:2013-11-19 20:58:02
【问题描述】:
所以我对 Java Swing 还很陌生,并且偶然发现了一些困难。我有一个正在运行的主框架(应用程序的主要部分在应用程序的执行过程中可见),它有一个按钮,一旦单击,就会调用一个弹出框架(窗口)来收集用户的信息,并且该框架有一些组件。问题是我真的不知道调用弹出窗口的正确方法,主窗口冻结执行并等待确定,或者单击弹出窗口上的取消按钮。一旦发生这种情况,主窗口代码会从弹出窗口中收集返回的值并继续。我尝试使用同步来完成此操作,但是弹出组件甚至不加载,只有 JFrame 和 JPanel(白色背景)并且弹出窗口在 wait() 条件下冻结。我知道有一种方法可以使用 JDialog 和其他方法,但我主要关心的是发现为什么弹出框不加载组件并在 wait() 条件之前冻结。 (当我摆脱 wait() 一切正常加载)。
//in Main window Class:
frame.setEnabled(false);
Test test = getNewTest(); //should freeze on wait() in popup window
frame.setEnabled(true);
//in Popup Window Class
public Test getNewTest() {
addPanel.setVisible(true);
addFrame.setVisible(true);
synchronized(flag) {
try {
flag.wait();
} catch (InterruptedException e) {}
}
addPanel.setVisible(false);
addFrame.setVisible(false);
if(success)
return new Test(testName, date);
else return null;
}
//When OK or Cancel button clicked appropriate handler sets
//success value and invokes flag.notify();
【问题讨论】:
标签: java swing dialog jframe popupwindow