2013-01-02 1 views
0

나는 경보 응용 프로그램을 만들고 있습니다. 스누즈 기능을 위해 UI를 호출하기 위해 SwingUtilities.invokeLater 메서드를 사용하고 있습니다. 하지만 실행하면 SwingUtilities.invokeLater 함수가 호출되지 않는 것을 알게되었습니다. 오히려 할invokeLater가 호출되지 않습니다.

while (!Calendar.getInstance().after(ch)) {// this line checks if it is time to sound alarm 
    } 

:하지만

Thread.sleep(ch.getTimeInMillis()-System.currentTimeMillis()); 

을 (당신은해야이 문제

public class IsTime { 
int hrs; 
int min; 
int sec; 
GregorianCalendar clk=new GregorianCalendar(); 
Calendar gtl= Calendar.getInstance(); 

    mp3 mix=new mp3(); 



    public void makeReady(int h,int m,int s,String ampm){ 

    Calendar c1=Calendar.getInstance(); 
    c1.set(Calendar.HOUR_OF_DAY,h); 
    c1.set(Calendar.MINUTE, m); 
    c1.set(Calendar.SECOND,s); 


    if("PM".equals(ampm)){ 
     c1.set(Calendar.AM_PM, Calendar.PM); 
     if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.PM){ 

      if(c1.after(Calendar.getInstance())){ 
       check(c1); 
      } 
      c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 

      check(c1); 

     } 
    } 
    if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){ 
      if(c1.after(Calendar.getInstance())){ 
       check(c1); 
      } 

      c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 

      check(c1); 
     } 
    if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.PM){ 
     c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 
     check(c1); 
    } 
} 
public void check(Calendar ch){ 
     while(!(Calendar.getInstance().after(ch))){//this line checks if it is time to sound alarm 
     } 

    SwingUtilities.invokeLater(new Runnable(){//here is my invokelater method 

       public void run(){ 
        System.out.println("git to invoke"); 
       new Snooze(); 

       } 

    }); 
      mix.start(); 


} 
public void makeReady(int mis){ 
     Calendar sz=Calendar.getInstance(); 
     sz.set(Calendar.SECOND, 0); 
     sz.set(Calendar.MINUTE, Calendar.getInstance().get(Calendar.MINUTE)+mis); 
     check(sz); 
    } 


} 

답변

2

이 줄은 정말 "대기"를 수행 할 수있는 적절한 방법이 아니다 작동을 도와주세요 그것이 긍정적인지 확인하십시오). 이제 알 수 있듯이, 코드가 CPU를 죽일 시간이되면 계속 평가할 것입니다.

invokeLater()의 경우 제대로 작동하는 예 (SSCCE) 없이는 말하기 어렵습니다. 통화 직전에 로그를 넣고 콘솔에 팝업되는지 확인하십시오.

관련 문제