2013-03-30 5 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; 
} 
} 

Edit: Источник входного сигнала является сканер штрих-кода. Он сканирует штрих-код и отправляет его в программу в формате 1234567890 {enter}. Как я могу захватить этот вход в java?

+0

Вы можете подключить файл к стандартным входам. – luketorjussen

+1

Вы можете сделать это, но вам нужно либо: 1) получить неинтенсивную Java-консоль для этого или 2) создать такой графический интерфейс, как GUI Swing. –

ответ

4

Jnativehook хорошая библиотека, которая обеспечивает глобальную клавиатуру (и мышь) вход (по крайней мере, я думаю, что это то, что вы имеете в виду «без необходимости вводить его в консоли «). Вам не нужен графический интерфейс или что-то еще для его работы, поэтому он не зависит от фокуса клавиатуры или других вещей, которые могут помешать вашему приложению вводить клавиатуру. С 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, вам, вероятно, придется что-то сделать с Swing, как говорит Hovercraft Full of Eels.

Что-то, что я представляю, это невидимое окно, которое фокусируется/выводится на фронт, захватывает ваши нажатия клавиш. Я не совсем уверен, что это возможно на Java.

Если вы в порядке с каким-то видимым окном, пока это не консоль, вы можете просто создать Jframe и добавить TextBox с качелями.

Смежные вопросы