如何使用线程运行两个JOptionPane

时间:2019-07-03 12:34:05

标签: java multithreading swing joptionpane

我必须设置两个对话框,我想停止第一个对话框,然后启动第二个对话框。谁能帮我解决这个问题

JOptionPane msg = new JOptionPane("your score is:  " + getScore(), JOptionPane.INFORMATION_MESSAGE);
        final JDialog dlg = msg.createDialog("Game Over");
        dlg.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);



     new Thread(new Runnable() {
          @Override
          public void run() {
            try {
              Thread.sleep(3000);
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
            dlg.dispose();

          }
        }).start();
        dlg.setVisible(true);

第二个对话框与

相同
JOptionPane message = new JOptionPane("Highscore:  " + getHighscore(), JOptionPane.INFORMATION_MESSAGE);
        final JDialog dialog = message.createDialog("Game Over");
        dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

现在我想在第一个对话框关闭后启动此对话框。

1 个答案:

答案 0 :(得分:0)

建议:

  1. 为了确保Swing线程安全,请使用Swing计时器,而不要直接使用后台线程。
  2. 使它成为非重复计时器。
  3. 在计时器的ActionListener中,关闭/释放当前对话框,然后打开第二个对话框。

例如,(代码未经测试)

final JDialog myModalDialog = ....;
final JDialog mySecondDialog = ....;
int timerDelay = 3000;
Timer timer = new Timer(timerDelay, e -> {
    myModalDialog.dispose();
    mySecondDialog.setVisible(true);
});
timer.setRepeats(false);
timer.start();
myModalDialog.setVisible(true);

或者:使用单个对话框并使用CardLayout tutorial

交换视图