"Please wait" 有延迟的消息

"Please wait" message with delay

我有一个很长的任务,我在执行过程中显示 "please wait" 消息。 我为此使用 SwingWorker。但是有时长任务并不长,所以我想延迟1秒显示消息,但我不知道该怎么做。

SwingWorker<Void, Void> mySwingWorker = new SwingWorker<Void, Void>(){
     @Override
    protected String doInBackground() throws InterruptedException 
        /** Execute some operation */   
    }
    @Override
    protected void done() {
        dialog.dispose();
    }
  };

  mySwingWorker.execute();

  JProgressBar progressBar = new JProgressBar();
  progressBar.setIndeterminate(true);
  JPanel panel = new JPanel(new BorderLayout());
  panel.add(progressBar, BorderLayout.CENTER);
  panel.add(new JLabel("Please wait......."), BorderLayout.PAGE_START);
  dialog.add(panel);
  dialog.pack();
  dialog.setLocationRelativeTo(win);
  dialog.setVisible(true);

}

为什么不在 "please wait"

的每次显示之间使用 Thread.sleep(1000);

一个简单的方法是设置

    long startTime = System.getNanoTime();

然后在显示 "please wait" 之前,您可以检查它是否 > 1 秒(1×10^9 纳米)

这可能不是最有效的方法,但它会起作用

在开始 SwingWorker 之前,开始一个 Swing Timer(至少)延迟一秒并设置不重复。

将此 Timer 传递给您的 SwingWorker,以便它可以访问它。当worker的done方法被调用时,停止Timer

如果 Timer 被触发,您将显示您的等待消息。

只要稍加努力,您就可以将整个东西包装在一个自包含的 class 中,使用 SwingWorkerPropertyListener 支持来检测工作人员何时开始和完成