Java 一次显示多个消息对话框

Java 一次显示多个消息对话框,java,swing,timer,joptionpane,Java,Swing,Timer,Joptionpane,我正在尝试制作一个程序,一次显示3个MessageDialog框。我认为,如果将JOPtionPane.showMessageDialog放在actionListner类中,用于swing timer,它将每秒显示一个新的MessageDialog框 下面是我提出的代码: package pracatice; import java.awt.event.*; import javax.swing.*; public class practice extends JFrame {

我正在尝试制作一个程序,一次显示3个
MessageDialog
框。我认为,如果将
JOPtionPane.showMessageDialog
放在
actionListner
类中,用于
swing timer
,它将每秒显示一个新的
MessageDialog

下面是我提出的代码:

package pracatice;

import java.awt.event.*;

import javax.swing.*;

public class practice extends JFrame 
{
    public static int num = 0;
    public static TimerClass tc = new TimerClass();
    public static Timer timer = new Timer(1000, tc);
    public JPanel panel = new JPanel();
    public JButton btn = new JButton("press");

    public practice()
   {
        setSize(100,100);
        setTitle("Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setPanel();
        setVisible(true);   
  }
     public void setPanel()
     {
        btn.addActionListener(new listener());
        panel.add(btn);

        add(panel);
    }

    public class listener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            num = 0;
            System.out.println("starting timer");
            timer.start();
        }
    }

      public static class TimerClass implements ActionListener
      {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("Adding 1 to num");
            num++;
            JOptionPane.showMessageDialog(null,"Test");
           if(num == 3)
           {
                System.out.println("stopping the timer");
                timer.stop();
            }
       }
 }  

 public static void main(String[] args)
 {
    practice p = new practice();
    System.out.println("created an instance of practice");
 }
}

它工作,但不是我想要的方式。它不是每秒显示一个新框,而是在您按上一个框上的“确定”后1秒显示一个新框


因此,当我按下“按下”按钮时,它会等待1秒钟并生成该框。当我按下“ok”键时,它会等待1秒并生成另一个,以此类推。你知道如何让这三个对话框一个接一个地出现吗?

创建对话框的方法(JOptionPane.show…)在用户关闭对话框之前不会返回。如果Swing是单线程的,那么在这种情况发生之前,其他Swing过程都无法进行。如果希望同时打开三个对话框,请使用
非模式对话框

使用JOptionPane的showX方法时,您正在创建文档中所述的模态(阻塞和一次一个)对话。 您可以通过手动创建JOptionPane而不是使用showX方法直接使用它

手动创建一个新的,并将其设置为非模态:

optionPane = new JOptionPane(...);
dialog = optionPane.createDialog(null, "the title");
dialog.setModal(false);
dialog.show();
例如,为什么不在一个对话框中显示多条消息呢。