我在我的Java程序中有一个等待用户按空格键的功能。我想修改这个函数,这样如果一段时间过去了,空间还没有被按下,函数也会返回。Java - 在一段时间后等待空间或返回
我想保持这个功能,因为它是,而不是改变风格,所以我真的很感谢修改这个功能的答案。谢谢!
public void waitForSpace() {
final CountDownLatch latch = new CountDownLatch(1);
KeyEventDispatcher dispatcher = new KeyEventDispatcher() {
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_SPACE) {
latch.countDown();
}
return false;
}
};
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher);
try {
//current thread waits here until countDown() is called (see a few lines above)
latch.await();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(dispatcher);
}
我看不出如何做到这一点的工作。 Swing是单线程环境,所以如果阻塞,等待用户输入,EDT无法处理关键事件......? – MadProgrammer
['CountDownLatch#await(long,TimeUnit)'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html#await%28long,%20java.util .concurrent.TimeUnit 29%)? – MadProgrammer
@MadProgrammer,我从来没有用过CountDownLatch,所以我只是做了一些游戏。如果您从EDT调用waitForSpace(),则它不响应空格键。如果您从线程调用该方法,那么它会响应空格键。在这两种情况下指定超时工作。您应该添加您的超时建议作为答案。 – camickr