Слушатель ключа Java в командной строке - PullRequest
10 голосов
/ 23 октября 2010

В большинстве демо показаны ключевые события в Swing, что эквивалентно командной строке?

Ответы [ 4 ]

9 голосов
/ 23 октября 2010

Swing отличается от среды командной строки в том смысле, что у вас нет событий в окне консоли. Стандартный графический интерфейс работает с объектами и событиями. Консоль не имеет такого эквивалентного понятия.

То, что вы делаете , - это стандартный вход (а также стандартный вывод), с которого вы можете читать. См. в этом вопросе о том, как прочитать один символ с консоли (без ожидания перехода на новую строку), или, скорее, о том, как это не очень легко сделать в Java.

Конечно, вы всегда можете выполнять чтение асинхронно в отдельном потоке. то есть основной поток будет продолжать делать что-то, а поток слушателя ожидает вызова блокировки ввода / вывода. Но это может быть реализовано и обработано только на уровне приложения.

6 голосов
/ 18 июня 2012

вы можете использовать BufferedReader в цикле:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = "";

   while (line.equalsIgnoreCase("quit") == false) {
       line = in.readLine();

       //do something
   }

   in.close();
4 голосов
/ 10 августа 2013

Следующий код не позволит комбинации Ctrl + C остановить Java-программу CLI.

import sun.misc.Signal; 
import sun.misc.SignalHandler;

    Signal.handle(new Signal("INT"), new SignalHandler() {
      // Signal handler method
      public void handle(Signal signal) {
        System.out.println("Got signal" + signal);
      }
    });
4 голосов
/ 13 июня 2013

KeyListener только для классов свинга.

Чтобы иметь эквивалентную функциональность в приложении командной строки, вы можете использовать библиотеку JNativeHook , которая выполняет это через JNI.Это позволит вам прослушивать глобальные ярлыки или движения мыши, которые в противном случае были бы невозможны при использовании чистой Java.Вам также не нужно использовать Swing или другие классы GUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...