我正在处理用户界面的交易或不处理。我遇到的第一个问题是如何等待按钮操作继续,我使用Count Down Latches并且它工作得很好。但无论何时,我点击一个按钮,我的JFrame中的所有内容都会消失,当你按下鼠标时它会回来,当我按下另一个按钮时突然重新出现(这在我使用Count Down Latches之前从未发生过,这也发生在Semaphores上,等等。我会尽量保持我的代码尽可能相关。
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);
}
答案 0 :(得分:2)
请注意CountDownLatch
的await()
方法“导致当前线程等到锁存器倒计数到零。”如果该线程是event dispatch thread,则GUI更新将被阻止,直到等待条件发生变化。通常,CountDownLatch
意味着允许单独的线程会合;它不应该用于事件调度线程中。这个完整的example协调了多个SwingWorker
实例,可能有助于澄清用法。