Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用invokeLater逐个显示对话框_Java_Swing_User Interface_Invokelater - Fatal编程技术网

Java 使用invokeLater逐个显示对话框

Java 使用invokeLater逐个显示对话框,java,swing,user-interface,invokelater,Java,Swing,User Interface,Invokelater,在两个不同的操作侦听器中,当满足某些条件时,将显示一个对话框。 如果两个操作侦听器都需要显示对话框,则将同时显示两个对话框。但我想让他们一个接一个地看 简化代码: SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1");

在两个不同的操作侦听器中,当满足某些条件时,将显示一个对话框。 如果两个操作侦听器都需要显示对话框,则将同时显示两个对话框。但我想让他们一个接一个地看

简化代码:

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1");
            }
        });

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 2");
            }
        });

这两个“SwingUtilities.invokeLater”调用位于不同的类中。

创建一个跟踪该类的类;此类将包含要显示的对话框队列;每当对话框关闭时,将显示队列中的第一个对话框并将其从队列中删除。当另一个类需要显示对话框时,如果队列为空或插入到队列中,则会立即显示对话框。

这与对话框的形式有关。关于这个话题有很多有用的文章。对话框具有不同的模态类型和不同的优先级。您可以通过创建优先级较低的第二个对话框来解决问题:

JOptionPane pane = new JOptionPane("dialog 2", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog("Message");
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);
希望这能有所帮助

如果需要,此方法将等待Runnable完成


或者在您的情况下,当第一个对话框关闭时。

可能还涉及到时间问题。当从事件分派中短时间连续调用两个对话框时,它对我有效。当从不同的类提交时,情况可能会有所不同。为什么要同时调用两个不同的ActionListens?听起来像是设计问题。您应该有一个单独的ActionListener来执行多个编辑(或其他)。然后可以分别调用每个编辑并分别显示其显示对话框。