2015-01-29 5 views
0

나는 선택한 시간에 PC를 종료 (또는 잠자기)하는 프로그램을 작성하고 있습니다.자바 - PC가 작업을 수행해야하는 시간을 어떻게 설정할 수 있습니까?

나는 이것을하기 위해 "야만적 인"방법을 사용했다. 나는 어떤 시간이 연속적인지를 제어하는 ​​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 그리고 당신 cant는 프로그램이 끝날 때까지 아무 것도하지 않습니다. 그것을 막을 수있는 유일한 방법은 프로세스를 닫는 것입니다.

다른 해결책이 있습니까? 타이머 또는 무언가처럼 ...

도움 주셔서 감사합니다.

+0

코드가 매초 실행되지 않고 계속 실행되지 않습니다. – jhamon

+0

아, 맞습니다. 방금 이렇게 잘못 말한 것 같습니다. – Dingo

+0

http://quartz-scheduler.org/하지만 외부 도구를 요구하거나 질문하지 않아도됩니다. 그래서 나는 정말로 그렇게 말하지 않았습니다. –

답변

0

ScheduledExecutorService을 사용해보세요. 앞으로 "이동"시간이 얼마나 될지 알아 내야하고 작업 중 하나를 사용하여 앞으로 몇 초 동안 작업 (모든 작업은 ok == true)을 예약해야합니다.