我正在做一个程序,可以在选定的时间关闭(或让你的睡眠)你的电脑。
目前我使用“野蛮”的方式来做这件事,我使用了一个控制连续时间的cicle,如果小时和分钟与所选值相同,则操作开始,否则, cicle继续。
private void btn_SetActionPerformed(java.awt.event.ActionEvent evt) {
hour_Decided = Integer.parseInt((String) cmb_Hours.getSelectedItem());
minutes_Decided = Integer.parseInt((String) cmb_Minutes.getSelectedItem());
int current_Hours = 0;
int current_Minutes = 0;
boolean ok = false;
do {
Calendar calendar = Calendar.getInstance();
current_Hours = calendar.get(Calendar.HOUR_OF_DAY);
current_Minutes = calendar.get(Calendar.MINUTE);
if (current_Hours == hour_Decided && current_Minutes == minutes_Decided) {
ok = true;
if (rdbtn_Standby.isSelected()) {
try {
Runtime.getRuntime().exec("Rundll32.exe powrprof.dll,SetSuspendState Sleep");
} catch (IOException ex) {
Logger.getLogger(StandbyForm.class.getName()).log(Level.SEVERE, null, ex);
}
} else if (rdbtn_Spegni.isSelected()) {
try {
Runtime.getRuntime().exec("shutdown -s -t 0");
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(StandbyForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}while (ok == false);
}
使用这种方法存在问题。线程freez,你不能做什么,直到程序完成。阻止它的独特方式是关闭过程。
还有其他解决方案吗?像计时器或其他东西......
感谢您的帮助。
答案 0 :(得分:0)
尝试使用ScheduledExecutorService。你必须弄清楚将来“走出去”的时间有多远,然后用{{1}中的一个来安排你的任务(你ok == true
时所做的一切)将来很多秒任务。