0

私はアラームアプリケーションに取り組んでいます。SwingUtilities.invokeLater メソッドを使用して、スヌーズ機能の UI を呼び出しています。しかし、実行すると、 SwingUtilities.invokeLater 関数が呼び出されていないことに気付きました。この問題で私を助けてください

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);  
    }  


}
4

1 に答える 1

2

この行は、「待機」操作を実行する適切な方法ではありません。

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

ではなく、次のようにします。

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

(そして、それが正であることを確認する必要があります)。現状では、コードは、おそらく CPU を停止する時間であるかどうかを継続的に評価します。

の場合invokeLater()、適切に完全に機能する例 ( SSCCE ) がないとわかりません。呼び出しの直前にログを配置して、コンソールに表示されるかどうかを確認してください。

于 2013-01-02T15:35:29.840 に答える