2013-03-30 93 views
1

我想获取用户键盘输入,但我似乎无法让它在没有使用控制台的情况下工作。获取用户输入,而不输入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中捕获这个输入?

+0

您可以将文件传送到标准输入。 – luketorjussen

+1

你可以做到这一点,但你必须要么1)为此获得一个非核心Java控制台或2)创建一个GUI,如Swing GUI来做到这一点。 –

回答

4

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提供了这个功能,所以它应该适用于大多数情况。如果您的平台出现问题,请在项目的错误跟踪器上报告。

+0

看起来正是我想要的。非常感谢。 – user1296058

+0

+1很久以后,在某人的帖子中看到了一些非常新的东西:) –

-1

Java是沙盒,所以我不认为你只能记录窗口外的按键。为此,你会更好地使用不同的语言。

如果你真的坚持用Java来做这件事,那么你可能必须像Swift一样做一些事情,比如气垫船Full of Eels正在谈论。

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

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