Как запустить два JOptionPane с потоками - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно установить два диалога, и я хочу остановить первый, а затем запустить второй. Может кто-нибудь, пожалуйста, помогите мне исправить это

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 голосов
/ 03 июля 2019

Рекомендации:

  1. Ради безопасности потоков Swing используйте таймер Swing, а не прямой фоновый поток.
  2. Сделать это неповторяющимся таймером.
  3. Внутри ActionListener таймера закройте / утилизируйте текущий диалог и откройте 2-й.

Например, (код не проверен)

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

...