package NET.worlds.console; import java.awt.Dialog; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class BlockingDialog extends Dialog implements ActionListener { private static final long serialVersionUID = 8379457384966170912L; boolean stillWaiting = true; public BlockingDialog(Frame parent, String title, boolean modal) { super(parent, title, modal); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { BlockingDialog.this.finish(); } }); } @Override public void actionPerformed(ActionEvent e) { this.finish(); } public void finish() { this.responded(); this.setVisible(false); } public synchronized void waitForResponse() { try { while (this.stillWaiting) { this.wait(); } } catch (Exception var2) { } } public synchronized void responded() { this.stillWaiting = false; this.notifyAll(); } }