【发布时间】:2016-12-07 15:26:06
【问题描述】:
我正在开发此应用程序以在用户给定的时间内关闭/重新启动和休眠计算机。我附上了我正在开发的应用程序的图片。用户可以在给定用户的时间内选择小时、分钟或秒来关闭/重新启动或休眠计算机。我附上了我正在使用的代码示例,但它没有倒计时
public void cal() {
int seconds = (int) jSpinner1.getValue();
int minutes = (int) jSpinner2.getValue();
int hours = (int) jSpinner3.getValue();
int SECONDS_IN_A_DAY = 24 * 60 * 60;
Calendar day = Calendar.getInstance();
day.set(Calendar.SECOND, seconds);
day.set(Calendar.MINUTE, minutes);
day.set(Calendar.HOUR_OF_DAY, hours);
long difference = day.get(seconds + minutes + hours);
long allSeconds = difference / 1000;
long days = allSeconds / SECONDS_IN_A_DAY;
long secondsDay = allSeconds % SECONDS_IN_A_DAY;
final long secondsinaDay = secondsDay % 60;
final long minutesinaDay = (secondsDay / 60) % 60;
final long hoursinaDay = secondsDay / 3600;
final java.util.Timer timer = new java.util.Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.printf("%d hours, %d minutes and %d seconds\n", hoursinaDay, minutesinaDay, secondsinaDay);
jLabel5.setText(String.valueOf(hoursinaDay));
jLabel6.setText(String.valueOf(minutesinaDay));
jLabel7.setText(String.valueOf(secondsinaDay));
//What should be in here if I needed to count down the Timer??????
}
}, 1000, 1000);
}
【问题讨论】:
-
这是什么问题? “它不计算时间”是什么意思?
-
您是否尝试过为您的计数器使用线程或作业?
-
hoursinaDay,例如,总是相同的值... -
您的 TimerTask 不会减少剩余时间值。它应该每次将剩余的秒数减少一秒。
-
@david Java(通常是大多数计算机系统)不是实时的,因此无法保证任务会准确每 1 秒执行一次;如果重复次数足够多,累积的误差可能会很大。对于每次执行,获取当前时间并计算剩余时间比每次简单地“删除 1 秒”要好得多,即使有时会导致“跳过”一秒。