Java 如何创建用户空闲5分钟后弹出的对话框?(爪哇)

Java 如何创建用户空闲5分钟后弹出的对话框?(爪哇),java,swing,time,joptionpane,Java,Swing,Time,Joptionpane,我有一个对话框,它是: JOptionPane.showMessageDialog(null,"Once medicine is given, measure temperature within 5 minutes." ,"Medication" ,JOptionPane.PLAIN_MESSAGE); 当用户按下“ok”时,它会直接进入一个Jframe,要求用户使用滑块输入温度,然后按下一个按钮,进入下一组内容 无论如何,我想在用户按下“ok”后创建一种独特的倒计时,因此在Jframe菜

我有一个对话框,它是:

JOptionPane.showMessageDialog(null,"Once medicine is given, measure temperature within 5 minutes." ,"Medication" ,JOptionPane.PLAIN_MESSAGE); 
当用户按下“ok”时,它会直接进入一个Jframe,要求用户使用滑块输入温度,然后按下一个按钮,进入下一组内容

无论如何,我想在用户按下“ok”后创建一种独特的倒计时,因此在Jframe菜单上空闲5分钟后,Jframe顶部应该会出现一个警告对话框,并显示“需要注意”之类的内容

这让我想起了actionListener。但它将由非物理元素调用,时间为5分钟(而不是单击任何按钮)

因此,也许代码应该是这样的:

JOptionPane.showMessageDialog(null,"Once medicine is given, measure temperature within 5 minutes." ,"Medication" ,JOptionPane.PLAIN_MESSAGE); 


temperature_class temp = new temperature_class(); // going to a different class where the the Jframe is coded

    if (time exceeds 5 minutes) { JOptionPane.showMessageDialog(null, "NEED attention", JOptionPane.WARNING_MESSAGE);}
    else { (do nothing) }

代码工作:

JOptionPane.showMessageDialog(null,"measure temp" ,"1" ,JOptionPane.PLAIN_MESSAGE); 

int delay = 3000; //milliseconds
 ActionListener taskPerformer = new ActionListener() {
 public void actionPerformed(ActionEvent evt) {

JOptionPane.showMessageDialog(null,"hurry." ,"Bolus Therapy Protocol" ,JOptionPane.PLAIN_MESSAGE); } };
new Timer(delay, taskPerformer).start();

temperature_class temp = new temperature_class();

然而,我希望它只做一次。那么如何调用set.Repeats(false)

您可以将
定时器任务
定时器
一起使用:

class PopTask extends TimerTask {
  public void run() {
    JOptionPane.show...
  }
}
然后,在哪里安排任务:

new Timer().schedule(new PopTask(), 1000*60*5);

也可以使用
cancel()
方法取消此类计时器您可以将
TimerTask
计时器一起使用:

class PopTask extends TimerTask {
  public void run() {
    JOptionPane.show...
  }
}
然后,在哪里安排任务:

new Timer().schedule(new PopTask(), 1000*60*5);

也可以使用
cancel()
方法取消此类计时器

阅读上Swing教程的部分。当显示该对话框时,启动计时器。当对话框关闭时,停止计时器


应使用Swing定时器,而不是TimerTask,这样,如果定时器触发,代码将在EDT上执行。

阅读上的Swing教程部分。当显示该对话框时,启动计时器。当对话框关闭时,停止计时器


应使用摆动计时器,而不是计时器任务,这样,如果计时器触发,代码将在EDT上执行。

基本上,在显示初始选项窗格后,启动一个。(A
javax.swing
one)

您还需要一个类级别变量,指示是否已输入临时值

JOptionPane.showMessageDialog(...);
tempHasBeenEntered = false;
Timer tim = new Timer(5 * 60 * 1000, new ActionListener() { 
                 public void actionPerformed(ActionEvent e) { 
                     if (!tempHasBeenEntered)
                         JOptionPane.showMessageDialog("Hey, enter the temp!!"); 
                 } 
}
tim.setRepeats(false);
tim.start();

一旦用户在表单中输入临时值,您就需要翻转该标志。

基本上,在显示初始选项窗格后,启动一个临时值。(A
javax.swing
one)

您还需要一个类级别变量,指示是否已输入临时值

JOptionPane.showMessageDialog(...);
tempHasBeenEntered = false;
Timer tim = new Timer(5 * 60 * 1000, new ActionListener() { 
                 public void actionPerformed(ActionEvent e) { 
                     if (!tempHasBeenEntered)
                         JOptionPane.showMessageDialog("Hey, enter the temp!!"); 
                 } 
}
tim.setRepeats(false);
tim.start();

一旦用户在表单中输入temp,您就需要翻转该标志。

我不同意使用
java.util
timer和timertasks。在处理swing应用程序时,通常最好使用swing计时器。在这种情况下,使用
java.util.Timer
javax.swing.Timer
不会有任何重大区别,因为它们每个都只需要一个线程。在任何情况下,如果您真的想要模拟行为,那么可以使用
调用器
。从我个人的经验来看,我已经多次使用
TimerTask
来触发各种各样的事情,没有任何问题,但这也是一个品味的问题:)我同意Jinguy,Swing的设计目的是让代码在EDT上执行。记住,你是在给新手提建议。是的,大多数时候你不会有问题,但是为什么要冒险调试一些随机问题呢?是的,没错。通常情况下,最好避免出现问题,但在这种情况下,我认为这并不重要。最重要的是要了解EDT和这些情况,所以基本上是的,OP应该遵循您的建议:)我不同意使用
java.util
timer和timertask。在处理swing应用程序时,通常最好使用swing计时器。在这种情况下,使用
java.util.Timer
javax.swing.Timer
不会有任何重大区别,因为它们每个都只需要一个线程。在任何情况下,如果您真的想要模拟行为,那么可以使用
调用器
。从我个人的经验来看,我已经多次使用
TimerTask
来触发各种各样的事情,没有任何问题,但这也是一个品味的问题:)我同意Jinguy,Swing的设计目的是让代码在EDT上执行。记住,你是在给新手提建议。是的,大多数时候你不会有问题,但是为什么要冒险调试一些随机问题呢?是的,没错。通常情况下,最好避免出现问题,但在这种情况下,我认为这并不重要。最重要的是要了解EDT和这些情况,所以基本上是的,OP应该遵循您的建议:)感谢您提供计时器链接..它可以工作!我想现在swing Timer应该是处理事情的好方法。但是,我希望它只做一次。。。我知道我必须在计时器上使用此设置重复(错误),但是where@Faraz,我会更新我的答案。您需要将计时器保存到一个变量中,您会看到的。感谢您提供计时器链接。它可以工作!我想现在swing Timer应该是处理事情的好方法。但是,我希望它只做一次。。。我知道我必须在计时器上使用此设置重复(错误),但是where@Faraz,我会更新我的答案。您需要将计时器保存到一个变量中,您将看到。