Java: Показать диалог сообщения в течение 10 секунд и удалить? - PullRequest
5 голосов
/ 30 июня 2011

Привет, я хочу показать JOptionPane.showMessageDialog(null, "Appication already running");

в течение 10 секунд, а затем удалить его. Как я могу это сделать?

Ответы [ 5 ]

8 голосов
/ 30 июня 2011

Вы можете создать JOptionPane вручную, без статических методов:

JOptionPane pane = new JOptionPane("Your message", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(parent, "Title");

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

7 голосов
/ 04 марта 2014

Я попробовал эти ответы и столкнулся с проблемой, что показ диалога является блокирующим вызовом, поэтому таймер не может работать.Следующая проблема решает эту проблему.

      JOptionPane opt = new JOptionPane("Application already running", JOptionPane.WARNING_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}); // no buttons
  final JDialog dlg = opt.createDialog("Error");
  new Thread(new Runnable()
        {
          public void run()
          {
            try
            {
              Thread.sleep(10000);
              dlg.dispose();

            }
            catch ( Throwable th )
            {
              tracea("setValidComboIndex(): error :\n"
                  + cThrowable.getStackTrace(th));
            }
          }
        }).start();
  dlg.setVisible(true);
2 голосов
/ 30 июня 2011

Моя Java немного ржавая, но вы можете просто использовать стандартный Timer класс:

import java.util.Timer;

int timeout_ms = 10000;//10 * 1000
Timer timer = new Timer();
timer.schedule(new CloseDialogTask(), timeout_ms);

//implement your CloseDialogTask:

class CloseDialogTask extends TimerTask {
  public void run() {
    //close dialog code goes here
  }
}
1 голос
/ 06 апреля 2017
// =====================
// yes = 0, no = 1, cancel = 2 
// timer = uninitializedValue, [x] = null  

public static void DialogBox() {

    JOptionPane MsgBox = new JOptionPane("Continue?", JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_CANCEL_OPTION);
    JDialog dlg = MsgBox.createDialog("Select Yes or No");
    dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dlg.addComponentListener(new ComponentAdapter() {
      @Override
      // =====================
      public void componentShown(ComponentEvent e) {
      // =====================
        super.componentShown(e);
        Timer t; t = new Timer(7000, new ActionListener() {
          @Override
          // =====================
          public void actionPerformed(ActionEvent e) {
          // =====================
            dlg.setVisible(false);
          }
        });
        t.setRepeats(false);
        t.start();
      }
    });
    dlg.setVisible(true);
    Object n = MsgBox.getValue();
    System.out.println(n);
    System.out.println("Finished");
    dlg.dispose();
    }
}  
0 голосов
/ 30 июня 2011

создайте небольшой кадр, такой как JOptionPane, покажите его в потоке и утилизируйте через 10 секунд

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...