1

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

我有一个由按下按钮启动的类,然后它启动另一个应该隐藏按钮的方法,然后它在另一个类中启动一个方法,该方法做了很多完美的事情,然后它启动了第三种方法在第三节课上,它应该做的第一件事就是睡觉,但它在隐藏我的按钮之前就睡觉了,并且完全跳过了隐藏我的按钮。

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

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

我确实读过关于invokeAndWaitEDT:s 应该更好的命令,但是我怎样才能使用它来暂停mythread......甚至,一个更好的问题,为什么它不隐藏按钮?:) 我的意思是,在我的脑海中,setVisible(false)在其他任何事情之前调用它会在它做其他任何事情之前隐藏它。为什么不呢?

4

1 回答 1

2

在事件调度线程 (EDT) 上执行代码时,您永远不应该调用 Thread.sleep(...)。这将冻结 GUI 并阻止它重新绘制自身。

通常,您的代码需要在单独的线程上执行,但将按钮设置为不可见的代码除外。阅读 Swing 教程中关于并发的部分以获取更多信息和解决方案。

于 2011-04-22T18:15:01.503 回答