我想仅在一定时间后才显示此 JOptionPane 的按钮“确定”(例如5 秒)。(我的目标实际上是让在另一个线程后面完成一些线程工作)
JOptionPane jop2 = new JOptionPane();
jop2.showMessageDialog(null, "Please wait 5s", "WAIT", JOptionPane.INFORMATION_MESSAGE);
我完全不知道该怎么做,你能给我一些可以解决这个问题的代码吗?非常感谢您!
我想仅在一定时间后才显示此 JOptionPane 的按钮“确定”(例如5 秒)。(我的目标实际上是让在另一个线程后面完成一些线程工作)
JOptionPane jop2 = new JOptionPane();
jop2.showMessageDialog(null, "Please wait 5s", "WAIT", JOptionPane.INFORMATION_MESSAGE);
我完全不知道该怎么做,你能给我一些可以解决这个问题的代码吗?非常感谢您!
没有特定的方法可以使用JOptionPane
. 您必须创建一个自定义对话框并在固定时间后显示“确定”按钮。您可以使用一次Swing 计时器。
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button.setVisible(true);
}
};
Timer timer = new Timer(0, taskPerformer);
timer.setInitialDelay(5000);
timer.setRepeats(false);
timer.start();
听起来您正在寻找的是SwingWorker
和的组合ProgressMonitor
。将SwingWorker
执行您长时间运行的任务(5 秒的任务),并使用ProgressMonitor
. 可以在这里找到一个向您展示如何让两者一起工作的示例:
getting the cancel event of Java ProgressMonitor
当然,如果您确信要在工作完成后采用显示继续按钮的方法,那么这里有一个示例可以让您朝着正确的方向开始。您将使用 aSwingWorker
来提醒您的 Dialog 长时间运行的后台任务已完成。
import java.awt.*;
import java.awt.Dialog.ModalityType;
import java.awt.event.*;
import javax.swing.*;
public class TempProject extends Box{
public TempProject(){
super(BoxLayout.Y_AXIS);
//Contains the content of the Alert Dialog
Box info = Box.createVerticalBox();
info.add(new Label("Please wait 5 seconds"));
final JButton continueButton = new JButton("Continue");
info.add(continueButton);
//The alert to wait 5 seconds
final JDialog d = new JDialog();
d.setTitle("WAIT");
d.setModalityType(ModalityType.APPLICATION_MODAL);
d.setContentPane(info);
d.pack();
//The action of the "Continue Button"
continueButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
d.dispose();
}
});
continueButton.setVisible(false);
//Thread That Does Work
final SwingWorker sw = new SwingWorker<Integer, Integer>()
{
protected Integer doInBackground() throws Exception {
//Do long running thread work here
int i = 0;
while (i++ < 100) {
System.out.println(i);
Thread.sleep(100);
}
return null;
}
@Override
protected void done(){
// What to do when the long runnng thread is done
continueButton.setVisible(true);
}
};
//Button to start the long running task
JButton button = new JButton("Click Me");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
sw.execute();
d.setVisible(true);
}});
add(button);
}
public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane(new TempProject());
frame.setPreferredSize(new Dimension(500, 400));
frame.pack();
frame.setVisible(true);
}
});
}
}
你可以使用这样的东西来停止代码 5 秒
try {
Thread.sleep(5000); // do nothing for 5000 miliseconds (5 seconds)
} catch (InterruptedException e) {
e.printStackTrace();
}