我想在一段时间后显示此JOptionPane按钮“OK”(例如, 5秒)。 (我的目的实际上是让这个其他线程完成一些线程工作)
JOptionPane jop2 = new JOptionPane();
jop2.showMessageDialog(null, "Please wait 5s", "WAIT", JOptionPane.INFORMATION_MESSAGE);
我根本不知道如何做到这一点,你能为我提供一些能解决这个问题的代码吗? 非常感谢你提前!
答案 0 :(得分:4)
使用JOptionPane
没有具体方法可以做到这一点。您必须创建自定义对话框并在固定时间后显示“确定”按钮。您可以使用Swing timer的一次传递。
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();
答案 1 :(得分:1)
听起来你正在寻找的是SwingWorker
和ProgressMonitor
的组合。 SwingWorker
将执行您长时间运行的任务(5秒钟),并使用ProgressMonitor
通知用户它的进展情况。可以在此处找到一个示例,说明如何使两者协同工作:
getting the cancel event of Java ProgressMonitor
当然,如果您确信在完成工作后想要采用显示“继续”按钮的方法,这里的示例应该可以帮助您开始正确的方向。您将使用SwingWorker
提醒您的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);
}
});
}
}
答案 2 :(得分:-1)
你可以用这样的东西来停止代码5秒
try {
Thread.sleep(5000); // do nothing for 5000 miliseconds (5 seconds)
} catch (InterruptedException e) {
e.printStackTrace();
}