我的目标是在java中运行一个程序,该程序在每天的某个特定时间执行代码列表。
我知道TimerTask和Timer实用程序,但有理由不使用它们。 我的大部分代码都是在while循环下运行,条件是线程仍处于活动状态。
一些声明:
static int theHour;
static int theMinute;
static int theSecond;
我的while循环的开始:
while (this.threadAlive)
{
System.out.println("START thread");
theHour = theTime.get(Calendar.HOUR_OF_DAY);
theMinute = theTime.get(Calendar.MINUTE);
theSecond = theTime.get(Calendar.SECOND);
System.out.println("the second is: " + theSecond);
//...
//...
//...
try
{
if (theHour == 12 && theMinute == 39 && (theSecond >= 0 || theSecond < 10) )
{
System.out.println("In the loop");
if (super.connectToDevice())
{
// Send the data command to the device
//out.println(COMMAND_GP);
System.out.println("Simulation of midnight is successful");
// Read and store the data returned from the device
String data = in.readLine();
data = "test gps data";
// Send the data off to be processed
sendDataForProcessing(data);
// Disconnect from the device
super.disconnectFromDevice();
}
}
//Catch any exceptions here
}
运行时间约10秒后控制台中的结果:
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
START thread
the second is: 46
我为theSecond
获得的结果是正确的,但在再次循环之后它永远不会更新。我的声明在课堂上全局定义,我尝试将它们声明为int
,但这没有任何区别。我做错了什么?
答案 0 :(得分:1)
以下内容将解决您的问题:
尝试在循环开始时添加此内容:
Calendar theTime = Calendar.getInstance();
谢谢!
答案 1 :(得分:0)
答案是您的 theSecond 变量被声明为静态。这意味着一旦您设置了一次值,就无法更改。
取出&#34;静电&#34;而且你会很高兴。
编辑:我现在看到你提到你已经尝试过没有静态。我现在想知道你是否以某种方式运行了以前编译的代码版本仍在将其视为静态代码?我认为这不是一个问题。