我正在尝试获取用户键盘输入,但是如果不使用控制台,我似乎无法使其正常工作。
我要实现的目标是让该程序捕获从键盘输入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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:输入源是条形码扫描仪。它将扫描条形码并将其以1234567890 {enter}的格式发送到程序。如何在Java中捕获此输入?
Jnativehook是一个不错的库,它提供全局键盘(和鼠标)输入(至少我认为这就是您的意思,“无需在控制台中输入”)。您不需要GUI或其他任何东西即可工作,因此它独立于键盘焦点或其他可能阻止您的应用程序获取键盘输入的事物。使用jnativehook,您可以简单地注册一个全局按键侦听器,该通知会通知系统中发生的任何按键操作,如下所示(基于项目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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:jnativehook使用特定于平台的本机代码来获取对键盘和鼠标事件的全局访问权限,但它为Windows,Mac OS和Linux提供了此访问权限,因此它在大多数情况下都可以使用。如果您的平台存在问题,请在项目的错误跟踪器中报告它。