Java if语句在计时器中循环

Java if语句在计时器中循环,java,Java,我有一个中断计时器应用程序。它使用timer类来计时,并在休息结束时通过短信通知我。这一切都是有效的,除了当if语句变为真时,它每秒向我发送一条短信。因此,我在一分钟内收到了大约60条消息,它将继续运行。我尝试过用许多不同的方法重写if语句,但它仍然做同样的事情。我知道没有像if循环这样的事情,但它就是这么做的。now变量位于计时器循环之外,在公共类中声明。我在下面发布了大部分的类代码 private static long now = System.currentTimeMillis

我有一个中断计时器应用程序。它使用timer类来计时,并在休息结束时通过短信通知我。这一切都是有效的,除了当if语句变为真时,它每秒向我发送一条短信。因此,我在一分钟内收到了大约60条消息,它将继续运行。我尝试过用许多不同的方法重写if语句,但它仍然做同样的事情。我知道没有像if循环这样的事情,但它就是这么做的。now变量位于计时器循环之外,在公共类中声明。我在下面发布了大部分的类代码

     private static long now = System.currentTimeMillis();
       public BreakTimer() {
        this.setText(when());
    }
     public void actionPerformed(ActionEvent ae) {
     (some more code)            
        long currenttime = System.currentTimeMillis() - now;
        int breaknotify = 15 - SettingsIni.breaknotifytime();

                    if ((currenttime) /6000 == breaknotify){                                    
                            try {
                                TextMessage.main(null);
                            } catch (AddressException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (MessagingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }               
                    }       
        }
public void start() {
        BreakTimer.reset();
        timer.start();     
    }
    public static void main(String[] args) {
        running = true;
        BreakTimer jtl = new BreakTimer();
        jtl.start();
    }
}

当发送第一条文本消息时,您需要停止计时器。Timer类对此有一个stop()方法

   if ((currenttime) /6000 == breaknotify){                                    
          try {
              TextMessage.main(null);
              //stop the timer here
           } catch (AddressException e) {

当您进行整数除法时,它将返回true的频率远远高于不返回true的频率。我建议这样做:

if ( (currenttime)/ 6000.0 == breaknotify

此外,您还需要终止计时器。

有没有不停止计时器的方法?我想记录下我休息了多长时间。当然。您可以在发送消息时将布尔变量设置为true。仅当布尔值为false时发送消息。这样你只发送一次。或者,你可以启动第二个计时器来计算时间。结果只是为textmessage创建了一个不同的计时器,这样我就可以停止它。我尝试过在int中进行division,但没有任何区别。除了6000码之外,我也看不出你的推荐和我的代码有什么不同。0@user1753429你在做整数除法,我的建议是不要做整数除法。因为对于int除法,“.”点之后的任何内容都将被忽略。将
.0
固定到其中一个参数或将其转换为双精度,将确保“.”之后的值不会被忽略并合并到方程式中。因此,您的意思是,它将15.0、15.1、15.2视为在触发if方面都是相同的statement@user1753429对在任何时候,它都不会收到像
15.0
这样的值,它只会收到15。请注意,您仅使用long和int。我将其更改为6000.0,也将int和long更改为double,但现在它不会触发。