【问题标题】:How to run two JOptionPane's with threads如何使用线程运行两个 JOptionPane
【发布时间】:2019-07-03 12:34:05
【问题描述】:

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

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.为了 Swing 线程安全,使用 Swing Timer 而不是直接使用后台线程。 2. 让它成为一个不重复的计时器。 3. 在计时器内,关闭/处理当前对话框并打开第二个。

标签: java multithreading swing joptionpane


【解决方案1】:

建议:

  1. 为了 Swing 线程安全,请使用 Swing Timer 而不是直接使用后台线程。
  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 交换视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多