Я создаю всплывающее окно JFrame, которое будет содержать сообщение и кнопки «да / нет».Я использую этот метод двумя способами.В 1 основная программа вызывает этот метод, а в другом этот метод вызывается непосредственно после закрытия предыдущего JFrame.Этот метод работает при вызове из главной программы, но когда другой JFrame вызывает его, JFrame, созданный в этом методе, отображается полностью пустым и графический интерфейс пользователя зависает.Я не могу выйти из JFrame, но я могу переместить его.Замораживание является результатом Thread.yield, потому что ответ всегда нулевой, но в каких случаях JFrame не будет создан должным образом?
Примечание: ответ является статической переменной.Также, когда этот JFrame создается другим JFrame, исходный JFrame не завершается корректно.Этот JFrame имеет JComboBox, и выбранная опция замораживается в раскрывающемся списке.Когда он не вызывает этот метод, он закрывается правильно.
public static String confirmPropertyPurchase(String message)
{
response = null;
final JFrame confirmFrame = new JFrame("Confirm");
confirmFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
response = "No";
}
public void windowDeactivated(WindowEvent e) {
confirmFrame.requestFocus();
}
});
final JPanel confirmPanel = new JPanel();
final JButton yes = new JButton();
final JButton no = new JButton();
yes.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
response = "Yes";
confirmFrame.setVisible(false);
}
});
no.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
response = "No";
confirmFrame.setVisible(false);
}
});
final JLabel confirmLabel = new JLabel(" " + message);
yes.setText("Yes");
yes.setPreferredSize(new Dimension(100, 100));
no.setText("No");
no.setPreferredSize(new Dimension(100,100));
confirmFrame.add(confirmLabel, BorderLayout.CENTER);
confirmPanel.add(yes);
confirmPanel.add(no);
confirmFrame.add(confirmPanel, BorderLayout.AFTER_LAST_LINE);
confirmFrame.setPreferredSize(new Dimension(520, 175
));
confirmFrame.pack();
confirmFrame.setVisible(true);
while(response == null)
{
Thread.yield();
}
return response;
}