如何在Java中延迟MessageDialogBox?

所以在这段代码中:

//Actions performed when an event occurs. public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); //If btnConvertDocuments is clicked, the FileConverter method is called and the button is then disabled [so as to prevent duplicates]. if (command.equals("w")) { new Thread(new Runnable() { public void run() { FileConverter fc = new FileConverter(); } }).start(); btnConvertDocuments.setEnabled(false); //Validation message ensuring completion of the step. JOptionPane.showMessageDialog(this, "Step 1 Complete!", "Validation", JOptionPane.INFORMATION_MESSAGE); } 

在FileConverter方法甚至没有被完成调用之前,似乎消息对话框窗口弹出方式太快了。 我想知道JOptionPane的位置是否正确,或者是否有办法延迟消息直到方法完成处理?

您可以使用SwingWorker 。

看看这里, java教程 。

 SwingWorker worker = new SwingWorker() { @Override public Void doInBackground() { FileConverter fc = new FileConverter(); return null; } @Override public void done() { JOptionPane.showMessageDialog(this, "Step 1 Complete!", "Validation", JOptionPane.INFORMATION_MESSAGE); } }; 

您应该使用具有延迟的Swing Timer ,而不是使用您自己的Thread和Runnable。

您可以通过两种方式使用Swing计时器:

  • 在延迟之后执行一次任务。 例如,工具提示管理器使用Swing计时器来确定何时显示工具提示以及何时隐藏它。
  • 反复执行任务。 例如,您可以执行动画或更新显示目标进度的组件。

文档中的一个示例:

  int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Perform a task... } }; Timer myTimer = new Timer(delay, taskPerformer); myTimer.setRepeats(false); myTimer.start();