Reputation: 13
So I'm fairly new to Java Swing, and I stumbled upon a certain difficulty. I have a main Frame running (main part of the application that is visible throughout the app's execution) which has a button that once clicked, invokes a popup Frame (window) to collect user's information, and that frame has some Components. The problem being is that I don't really know the right approach to invoking the popup window and the main window freezing the execution and waiting until OK, or cancel button is clicked on the popup. Once this happens the main window code collects the returned values from the popup and resumes. I tried using synchronization to accomplish this, however the popup components don't even load, just the JFrame and JPanel (white background) and the popup freezes up on the wait() condition. I know that there is a way of doing it with JDialog and others, my main concern however, is to discover why the popup frame doesn't load the components and freezes up before the wait() condition. (when I get rid of wait() everything loads properly).
//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();
Upvotes: 1
Views: 6995
Reputation: 285405
Upvotes: 2