Java 倒计时闩锁会导致JFrame(JButtons等)中的内容消失,并且只有在鼠标悬停时才会返回

Java 倒计时闩锁会导致JFrame(JButtons等)中的内容消失,并且只有在鼠标悬停时才会返回,java,multithreading,swing,synchronization,jframe,Java,Multithreading,Swing,Synchronization,Jframe,我正在处理用户界面的交易或不交易。我遇到的第一个问题是如何等待按钮动作继续,我使用了倒计时闩锁,它工作得非常好。但是,每当我点击一个按钮,我的JFrame中的所有内容都会消失,当你鼠标移到它上面时,它就会回来。当我按下另一个按钮时,它会突然重新出现(这在我使用倒计时锁存器之前从未发生过,在信号量等方面也会发生),我会尽量保持代码的相关性 public CountDownLatch cdl = new CountDownLatch(1); pickFirst(); try

我正在处理用户界面的交易或不交易。我遇到的第一个问题是如何等待按钮动作继续,我使用了倒计时闩锁,它工作得非常好。但是,每当我点击一个按钮,我的JFrame中的所有内容都会消失,当你鼠标移到它上面时,它就会回来。当我按下另一个按钮时,它会突然重新出现(这在我使用倒计时锁存器之前从未发生过,在信号量等方面也会发生),我会尽量保持代码的相关性

    public CountDownLatch cdl = new CountDownLatch(1);
    pickFirst();
    try {
        cdl.await();
    } catch (Exception E) {
    }
    while (banker.findCasesLeft() > 2) {
        banker = new Banker(Main.f.values);

        for (i = casesToPick; i >= 1; i--) {
            cdl = new CountDownLatch(1);
            pickCase();
            picked = false;
            try {
                cdl.await();
            } catch (Exception E) {
            }
        }
^^^这是我的课,负责挑选案例,下面是actionlisteners课

public void actionPerformed(ActionEvent ae) {
    if (!Main.me.pickedFirst) {
        Main.me.pickedCase = caseNo;
        Main.f.log += "You picked to keep case " + caseNo + ".\n";
        setText(caseNo + "\np");
        Main.f.changeLog();
        Main.me.pickedFirst = true;
        Main.me.cdl.countDown();
    } else {
        int value = Main.me.values[caseNo-1];
        Main.me.values[caseNo] = 0;
        Main.f.values[getIndex(value)].setSelected(true);
        Main.f.log += "You picked to get rid of case " + caseNo + ". It contained $" + value + ".\n";
        Main.f.changeLog();
        Main.me.picked = true;
        Main.me.cdl.countDown();
    }
    setEnabled(false);
}

请注意,“的
await()
方法会导致当前线程等待,直到闩锁倒计时为零。”如果该线程是当前线程,GUI更新将被阻止,直到等待条件更改。一般来说,
CountDownLatch
意味着允许单独的线程会合;它不应用于在事件调度线程内进行调度。这个完整的文件协调了多个
SwingWorker
实例,可能有助于澄清用法。

如果没有一个完整的文件,就不可能确切地知道问题可能是什么。然而,
Main.x
让我害怕,因为它表明您的大部分程序都是基于
static
的使用,更不用说完全缺乏访问控制…如果我只使用一个,这仍然是一个问题吗?另外,我还需要添加什么来显示问题?检查链接,它会告诉你你需要知道的所有更新到UI不需要重新构建输出,屏幕上的空白不是UI正常的状态,你的UI是如何工作的,这是一个严重的问题,考虑MVC方法。