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

Java 隐藏按钮,然后在单击按钮后等待2秒钟,然后再次显示,java,button,sleep,event-dispatch-thread,Java,Button,Sleep,Event Dispatch Thread,我有一个我正在做的学校项目,我需要让我的代码隐藏一个按钮,然后睡觉,然后继续,但它永远不会隐藏按钮 我有一个类是通过按下按钮启动的,然后它启动另一个方法来隐藏按钮,然后它在另一个类中启动一个方法来做一系列它做得很完美的事情,然后它在第三个类中启动第三个方法,它应该做的第一件事是睡眠,但它在隐藏我的按钮之前睡眠,完全跳过了隐藏我的按钮 以下是代码部分(不要介意丹麦值/方法名称): 我知道这部分被一个if包围着。。但它确实被这样称呼 if(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(){
对于(int i=0;i

我确实读过关于
invokeAndWait
命令的内容,该命令对于EDT:s应该更好,但是我如何使用它来暂停
mythread
…或者,一个更好的问题,它为什么不隐藏按钮?:)我的意思是,在我的脑海中调用
setVisible(false)
在其他任何操作之前将其隐藏。为什么不呢?

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


一般来说,您的代码需要在单独的线程上执行,但设置按钮不可见的代码除外。有关更多信息和解决方案,请阅读Swing教程中的部分。

上一个示例代码不应该调用setVisible(false)而不是setEnabled(false)?setEnable只是禁用使按钮不可点击的按钮,而不是将其隐藏。setEnable的作用是使其在执行cumputertur()时,用户不能点击按钮,最后撤销setEnable(false)…:)调用EANDWAIT()是有用的,但我不知道如何在我的情况下使用它,因为它隐藏了我的按钮后需要执行操作。您可能不应该使用invokeAndWait()。您应该创建一个新线程来运行任务。当线程启动时,您使用invokeLater(…)禁用该按钮。您可以使用Thread.sleep()。然后使用invokeLater启用该按钮。
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.
}
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.");
    }