Java - 等待空间或在一定时间后返回

标签 java swing

我的 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);
    }

最佳答案

尝试使用 CountDownLatch#await(long, TimeUnit)相反……

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(30, TimeUnit.SECONDS);
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }  
    KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(dispatcher);
}

关于Java - 等待空间或在一定时间后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952083/

相关文章:

java - Java 8 与 Java 9 中的 Stream.peek() 方法

java - log4j2 不写入文件

java - Java 中的 System.out.write() - 不打印整数值的最低有效位

java - Java KeyListeners 的问题......可能还有程序本身

java - 如何使用 NetBeans 处理通过 Java 中的 New JFrame 创建的框架?

java - 对象映射器无法序列化对象类的引用

java - Spring尝试绑定(bind)所有字段

java - 如何在java中为jbutton添加快捷键?

java - 创建 JFrame 的正确方法

java - 使用构造函数的 Graphics2D