首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用invokeLater

未调用invokeLater
EN

Stack Overflow用户
提问于 2013-01-02 23:30:06
回答 1查看 141关注 0票数 0

我正在开发一个警报应用程序。我正在使用SwingUtilities.invokeLater方法来调用我的UI for snooze函数。但是当我运行它时,我注意到SwingUtilities.invokeLater函数没有被调用。请帮我解决这个问题

代码语言:javascript
复制
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);  
    }  


}
EN

回答 1

Stack Overflow用户

发布于 2013-01-02 23:35:30

这一行确实不是执行“等待”操作的正确方式:

代码语言:javascript
复制
while (!Calendar.getInstance().after(ch)) {// this line checks if it is time to sound alarm
    }

而是这样做:

代码语言:javascript
复制
Thread.sleep(ch.getTimeInMillis()-System.currentTimeMillis());

(您应该确保它是正的)。按照现在的情况,你的代码会不断地评估是否是可能会杀死你CPU的时间。

对于你的invokeLater()来说,如果没有一个合适的完整的例子(一个SSCCE),就很难判断。尝试在呼叫之前放置一个日志,看看它是否会在您的控制台中弹出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14124608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档