Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何设置pc必须执行操作的时间?_Java_Timer_Runtime_Freeze_Shutdown - Fatal编程技术网

Java-如何设置pc必须执行操作的时间?

Java-如何设置pc必须执行操作的时间?,java,timer,runtime,freeze,shutdown,Java,Timer,Runtime,Freeze,Shutdown,我正在做一个程序,在选定的时间关闭或使你的电脑进入睡眠状态 目前,我使用了一种野蛮的方法来实现这一点,我使用了一个循环来控制时间的连续性,如果小时和分钟与所选值相同,则操作开始,否则循环继续 private void btn_SetActionPerformed(java.awt.event.ActionEvent evt) { hour_Decided = Integer.parseInt((String)

我正在做一个程序,在选定的时间关闭或使你的电脑进入睡眠状态

目前,我使用了一种野蛮的方法来实现这一点,我使用了一个循环来控制时间的连续性,如果小时和分钟与所选值相同,则操作开始,否则循环继续

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);
}
用这种方法有一个问题。线程是自由的,在程序完成之前你什么都不能做。停止它的唯一方法是关闭进程

还有别的解决办法吗?像计时器之类的


谢谢你的帮助。

试着用一个。您必须计算出运行时间在未来有多远,然后使用ScheduledExecutorService.schedule tasks中的一个,在未来的几秒钟内,当ok==true时,计划您的任务。给定的代码不是每秒钟执行一次,而是连续执行哦,是的,是的,我说得很糟糕,但是,对于要求外部工具或库的问题也不是这样,所以我并没有真的这么说。也许这是一个可行的方法。一个解决方案是设置一个周期性检查是否是关闭的时候