隐藏按钮,然后在单击按钮后再等待2秒再显示它

时间:2011-04-22 17:37:36

标签: java button sleep event-dispatch-thread

我正在制作这个学校项目,我需要让我的代码隐藏一个按钮,然后睡觉,然后继续,但它永远不会隐藏按钮。

我有一个按下按钮启动的类,它然后启动另一个应该隐藏按钮的方法,然后它在另一个类中启动一个方法,它执行一堆完美的事情,然后启动它第三类中的第三种方法,它应该做的第一件事是睡眠,但它在隐藏我的按钮之前就会睡觉,并完全跳过隐藏我的按钮。

这是代码部分(不介意丹麦值/方法名称):

public void turncard(final int navn,boolean spiller){
    knap.setVisible(false);
    EqualCheck.storevalue(this,spiller);
}

我知道这个部分被一个if包围但是它确实像这样调用。

if(spiller){                   //tester om det er spilleren der har vendt kort,
   kort.repaint();             //og hvis det er, så starter den computerens
   Main.spillet.computertur(); //tur.
}

然后在“computertur”方法的开头

public void computertur() {
    for(int i = 0; i < kortene.size(); i++) {
        kortene.get(i).knap.setEnabled(false);
    }
    try {
        Thread.sleep(2000);
    } catch ( Exception e) {
        System.out.println("sleep failed.");
    }

我确实读到了invokeAndWait命令,该命令应该更适合EDT:s,但是如何使用它来暂停mythread ...甚至更好的问题,为什么不它隐藏了按钮? :)我的意思是,在我的脑海中调用setVisible(false)之前,其他任何东西都会在它做任何事之前隐藏它。为什么不呢?

1 个答案:

答案 0 :(得分:2)

在Event Dispatch Thread(EDT)上执行代码时,永远不应该调用Thread.sleep(...)。这将冻结GUI并防止它重新绘制自己。

通常,您的代码需要在单独的Thread上执行,但设置按钮的代码除外。阅读Concurrency上Swing教程中的部分,了解更多信息和解决方案。