Java 以编程方式关闭JOptionPane.ShowInternalOptionDialog

Java 以编程方式关闭JOptionPane.ShowInternalOptionDialog,java,swing,joptionpane,Java,Swing,Joptionpane,我目前的设计是这样的: 我有一个显示主应用程序的外部框架。当用户单击主应用程序上的按钮时,应启动一个弹出窗口。我正在使用JOptionPane.showInternalOptionDialog并将按钮对象作为选项传递。当用户单击其中一个按钮时,它应该运行某些命令,然后关闭窗口。我无法关闭显示弹出窗口的框架 我在这个论坛上发现了一个类似的问题,建议采取以下解决方法。 但是上面的解决方法关闭了我的整个gui。我只想关闭JOptionPane弹出窗口 提前感谢。有几种解决方案: 直接创建JOptio

我目前的设计是这样的: 我有一个显示主应用程序的外部框架。当用户单击主应用程序上的按钮时,应启动一个弹出窗口。我正在使用JOptionPane.showInternalOptionDialog并将按钮对象作为选项传递。当用户单击其中一个按钮时,它应该运行某些命令,然后关闭窗口。我无法关闭显示弹出窗口的框架

我在这个论坛上发现了一个类似的问题,建议采取以下解决方法。

但是上面的解决方法关闭了我的整个gui。我只想关闭JOptionPane弹出窗口

提前感谢。

有几种解决方案:

  • 直接创建JOptionPane,而不是使用showX()方法。这将允许您对对话框进行引用,您可以将该对话框传递给按钮,以允许它调用dispose方法()
  • 创建自己的对话框,而不是使用JOptionPane。这将是我的首选选项,因为您正开始摆脱一个简单的对话框

  • 默认情况下,单击
    作业窗格中的按钮将关闭对话框。如果您的按钮没有,那是因为您使用的是实际的组件,而不是字符串或其他对象,并且它正在调用按钮的自定义事件处理程序,而不是自己的

    我建议您采用不同的方法,使用字符串而不是按钮。使用一组按钮作为输入值,当调用
    showInternalOptionDialog
    返回时,您可以检查int索引以找出按下的内容,然后在代码中打开它。这样,您根本不必触摸
    作业窗格
    ,它会自动关闭。

    试试看

    JOptionPane.getRootFrame().dispose();
    

    有一次我也遇到了同样的问题。我使用一个线程来解决这个问题,该线程在X毫秒后关闭我的JOptionPane

    import javax.swing.JOptionPane;
    
        public class JOptionPaneExample {
            public static void main(String[] args) {
                final JOptionPane pane =new JOptionPane();
                Thread t1 = new Thread(new Runnable() {
                    public void run() {
                        try {
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }               
                        pane.getRootFrame().dispose();
                    }
                });
                t1.start();
                pane.showMessageDialog(null, "I will close after 3000 milli's", "Programmatic Auto-close JOptionPane", JOptionPane.INFORMATION_MESSAGE);
                System.exit(0);
            }
        }
    

    我使用JOptionPane的原因是我想要一个模态对话框。没错,我传递了字符串和Jbutton作为选项。我使用JButton对象作为选项的原因是,我不希望窗格立即关闭。我希望所有的检查都完成并结束。在处理过程中,如果有任何错误,我希望窗格保持打开状态。啊,感谢您清除这些错误。在这种情况下,我绝对建议您为此定制
    JDailog
    JOptionPane
    通常用于简单的问题回答场景。谢谢大家。看来JDialog是我应该走的路线。