Java 通过构造函数的JOptionPane未显示/提示

Java 通过构造函数的JOptionPane未显示/提示,java,swing,visibility,joptionpane,Java,Swing,Visibility,Joptionpane,我正在编写一个脚本,它将调用一组其他脚本,在必要时传递适当的参数。由于调用了多个脚本,因此可能出现多个故障点。如果脚本在流程中途失败,则会记录该脚本,并在程序下次启动时提示用户从该位置继续 服务器和用户都可以启动程序。一个是自主的,一个不是。在autonomy的情况下,我希望恢复的提示有10秒的超时时间,这样如果没有收到输入,脚本将只在开始时启动 我已经从静态showOptionDialog移动到一个JOptionPane构造的对话框,这样我就可以通过编程方式访问它,在10秒后杀死它我的问题在于

我正在编写一个脚本,它将调用一组其他脚本,在必要时传递适当的参数。由于调用了多个脚本,因此可能出现多个故障点。如果脚本在流程中途失败,则会记录该脚本,并在程序下次启动时提示用户从该位置继续

服务器和用户都可以启动程序。一个是自主的,一个不是。在autonomy的情况下,我希望恢复的提示有10秒的超时时间,这样如果没有收到输入,脚本将只在开始时启动

我已经从静态showOptionDialog移动到一个JOptionPane构造的对话框,这样我就可以通过编程方式访问它,在10秒后杀死它我的问题在于构造函数,不会出现提示。

我所尝试的:

  • 我已经通过调试验证了代码是否正在进入代码块 下面是Log()脚本
  • 如您所见,我已尝试添加JFrame 构造器。JFrame构造函数、.add()和 SetVisible(true)是没有产生提示的新添加项 还有
  • 我还注释掉了10秒 setVisible(false),以防调用它 过早地
我肯定我错过了一些明显的东西,但我看不到

    if(foundErroredScript != null)
        {
            Log("debug - Found errored script, \"" + foundErroredScript + "\"");

            //Resume prompt
            Object[] options = {"Yes, resume", "No, start over"};               
            JFrame frame = new JFrame();
            JOptionPane pane = new JOptionPane("Would you like to resume from \"" + foundErroredScript + "\", AKA the last run script which errored?",
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE,
                    null,
                    options);
            frame.add(pane);
            final JDialog dialog = pane.createDialog("Found last errored module");
            Timer timer = new Timer(10000, new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    //dialog.setVisible(false);
                }
            });
            timer.setRepeats(false);
            timer.start();

            frame.setVisible(true);
            dialog.setVisible(true);


            Log("User selected " + pane.getValue());
我想出来了

在遵循mKorbel简化和隔离的建议后,我将JOptionPane移到了它自己的简单类中。我不小心翻转了MessageType和OptionType。程序在隔离时引发异常,但在主程序内部运行时不会引发异常。这是因为从类构造函数分支出来的主程序逻辑最初是从引发IOException的主方法调用的

所以不是这个

    JOptionPane pane = new JOptionPane("Would you like to resume from \"here\", AKA the last run script which errored?",
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null,
            options);
应该是这样,

    JOptionPane pane = new JOptionPane("Would you like to resume from \"here\", AKA the last run script which errored?",
            JOptionPane.QUESTION_MESSAGE,
            JOptionPane.YES_NO_OPTION,
            null,
            options);
愚蠢的错误


编辑:我还删除了框架,因为它对于一个基本上没有GUI的应用程序来说是不必要的。

类似形式的代码工作时不会出现问题,调试或发布SSCCE/MCVE简短、可运行、可编译的演示字束直到JOptionPane可见为止不会出现任何情况,模式对话框阻止(全部)重新绘制要查看已可见的GUI,请参见。