无需在Java控制台中输入即可获得用户输入

时间:2013-03-30 18:40:15

标签: java

我正在尝试获取用户键盘输入,但我似乎无法在不使用控制台的情况下使用它。

我想要实现的是让程序捕获用户从键盘输入12345,而无需在控制台中输入。然后返回捕获的整数。

public class InputWithoutConsoleTest {

public static void main(String[] args) {
    System.out.println(scanNumber());;
}

private static int scanNumber() {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return Integer.parseInt(br.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
}
}

编辑:输入源是条形码扫描仪。它将扫描条形码并以1234567890 {enter}的格式将其发送到程序。如何在java中捕获此输入?

3 个答案:

答案 0 :(得分:5)

Jnativehook是一个很好的库,它提供全局键盘(和鼠标)输入(至少我认为这就是你所说的“无需在控制台中输入它”)。您不需要GUI或其他任何工具,因此它独立于键盘焦点或其他可能阻止您的应用程序获得键盘输入的东西。使用jnativehook,您可以简单地注册一个全局密钥监听器,该监听器将被通知系统中发生的任何按键操作,如下所示(基于examples from the project's wiki):

public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
            System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
            System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
            System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();

            GlobalKeyListenerExample listener = new GlobalKeyListenerExample()
            GlobalScreen.getInstance().addNativeKeyListener(listener);

        } catch (NativeHookException ex) {
            System.err.println(ex.getMessage());
        }
    }
}

注意:jnativehook使用特定于平台的本机代码来获取键盘和鼠标事件的全局访问权限,但它为Windows,Mac OS和Linux提供了此功能,因此它适用于大多数情况。如果您的平台出现问题,请在项目的错误跟踪器上报告。

答案 1 :(得分:0)

我可以轻松地将键盘输入捕捉到JTextField or JTextArea

答案 2 :(得分:-1)

Java是沙箱,所以我认为你不能只在窗口外记录按键。对于使用不同的语言,你会好得多。

如果你真的坚持用Java做这件事,你可能不得不像Swing Full of Eels正在谈论的Swing那样做。

我想象的是一个看不见的窗口,被聚焦/带到前面会捕捉你的击键。我不完全确定这在Java中是否可行。

如果您可以使用某种可见窗口,只要它不是控制台,您就可以创建一个Jframe并添加一个带有swing的TextBox。