Закрытие программы JOptionPane

Я работаю над проектом, в котором я хотел бы закрыть общий JOptionPane программным путем (не физически нажимая на какие-либо кнопки). Когда истечет таймер, я хотел бы закрыть любую возможную JOptionPane, которая может быть открыта, и вывести пользователя обратно на экран входа в мою программу. Я могу полностью оттолкнуть пользователя, но JOptionPane остается, если я физически не нажму кнопку на нем.

Я смотрел на многих сайтах без такой удачи. Вызов метода doClick () на «Red X» JOptionPane не представляется возможным, и использование JOptionpane.getRootFrame (). Dispose () не работает.

2 Solutions collect form web for “Закрытие программы JOptionPane”

Технически вы можете пропустить все windows приложения, проверьте, имеют ли они тип JDialog и имеют дочерний тип JOptionPane, и удалите диалог, если это так:

Action showOptionPane = new AbstractAction("show me pane!") { @Override public void actionPerformed(ActionEvent e) { createCloseTimer(3).start(); JOptionPane.showMessageDialog((Component) e.getSource(), "nothing to do!"); } private Timer createCloseTimer(int seconds) { ActionListener close = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Window[] windows = Window.getWindows(); for (Window window : windows) { if (window instanceof JDialog) { JDialog dialog = (JDialog) window; if (dialog.getContentPane().getComponentCount() == 1 && dialog.getContentPane().getComponent(0) instanceof JOptionPane){ dialog.dispose(); } } } } }; Timer t = new Timer(seconds * 1000, close); t.setRepeats(false); return t; } }; 

Этот код получил от https://amp.reddit.com/r/javahelp/comments/36dv3t/how_to_close_this_joptionpane_using_code/, как представляется, лучший подход ко мне. Это включает в себя активацию classа JOptionPane, а также использование статических вспомогательных методов для этого. Преимущество состоит в том, что у вас есть объект JOptionPane, который вы можете использовать, когда хотите закрыть диалог.

 JOptionPane jop = new JOptionPane(); jop.setMessageType(JOptionPane.PLAIN_MESSAGE); jop.setMessage("Hello World"); JDialog dialog = jop.createDialog(null, "Message"); // Set a 2 second timer new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (Exception e) { } dialog.dispose(); } }).start(); dialog.setVisible(true); 
  • Как добавить гиперссылку в JLabel
  • Получить компонент Swing по имени
  • Размещение слушателя Придерживаясь традиционного шаблона MVC (без посредника)
  • Как генерировать исключения из RepaintManager
  • Отличный индикатор выполнения в java
  • Автозаполнение JComboBox
  • Ограничение количества символов в JTextField
  • Есть ли хороший и свободный выбор даты и времени для Java Swing?
  • События мыши JLabel для перетаскивания
  • Невосприимчивый KeyListener для JFrame
  • Печать JFrame и его компонентов
  • Давайте будем гением компьютера.