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

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

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

Технически вы можете пропустить все 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); 
  • Пользовательская кнопка, не работающая с mac (ButtonUI)
  • Могу ли я иметь JTabbedPane с JMenuBar?
  • JComboBox Выбор слушателя?
  • Как сделать canvas с Swing?
  • Создание подменю в контекстном меню из переопределенного getActions в Java JHotDraw
  • Минимизация Jinternal Frame без нажатия кнопки
  • Как совместить прослушиватели событий с запросом на событие?
  • Обеспечение пробела в графическом интерфейсе Swing
  • Список свойств интерфейса Java Swing?
  • Позволяя клавише «Ввод» нажать кнопку «Отправить», в отличие от использования только MouseClick
  • Как сделать JFrame Modal в Swing java
  • Interesting Posts

    Как автоматизировать монтирование luks-partition только тогда, когда диск подключен

    Как копировать текст с веб-страницы, где она была отключена?

    Сколько информации могут получить веб-сайты о вашем браузере / ПК?

    Неизменяемый против Unmodifiable collection

    Вложенная вкладка в Google Chrome имеет эффект рябины или выделения

    перенаправить stdout / stderr в строку

    Вложенные репитеры в ASP.NET

    Как передать параметры Activator.CreateInstance ()

    Воспроизводимые фоновые изображения css

    Зеркальное разделение внутреннего жесткого диска на внешний раздел жесткого диска

    Как установить соединение по коммутируемому соединению автоматически после загрузки + загрузки 90 МБ данных в Windows?

    Как публиковать Web с помощью msbuild?

    Виртуальная память и SSD

    Может ли командная строка Windows поддерживать Linux «cd -»?

    Как скрыть или удалить адрес электронной почты из окна блокировки Windows 8?

    Давайте будем гением компьютера.