Swing 调用器未被调用
我正在开发一个闹钟应用程序。我正在使用SwingUtilities.invokeLater方法调用我的UI for snooze函数。但当我运行它时,我注意到没有调用SwingUtilities.invokeLater函数。请帮我解决这个问题Swing 调用器未被调用,swing,user-interface,thread-safety,Swing,User Interface,Thread Safety,我正在开发一个闹钟应用程序。我正在使用SwingUtilities.invokeLater方法调用我的UI for snooze函数。但当我运行它时,我注意到没有调用SwingUtilities.invokeLater函数。请帮我解决这个问题 public class IsTime { int hrs; int min; int sec; GregorianCalendar clk=new GregorianCalendar(); Calendar gtl= Calendar
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);
}
}
此行实际上不是执行“等待”操作的正确方式:
while (!Calendar.getInstance().after(ch)) {// this line checks if it is time to sound alarm
}
而是:
Thread.sleep(ch.getTimeInMillis()-System.currentTimeMillis());
(你应该确保它是积极的)。现在,您的代码将不断评估是否是时间可能会杀死您的CPU
对于您的invokeLater()
,如果没有合适的完全工作的示例(an),很难判断。试着在通话前放一个日志,看看它是否会在你的控制台中弹出