System.console () возвращает значение null

Я использовал readLine из BufferedReader чтобы получить ввод / новый пароль от пользователя, но хотел скрыть пароль, поэтому я пытаюсь использовать class java.io.Console . Проблема в том, что System.console() возвращает значение null когда приложение отлаживается в Eclipse. Я новичок в Java и Eclipse не уверен, что это лучший способ достичь? Я нажимаю правой кнопкой мыши на исходный файл и выбираю «Debug As»> «Java Application». Есть ли обходной путь?

Это ошибка # 122429 of eclipse

Этот fragment кода должен сделать трюк:

 private String readLine(String format, Object... args) throws IOException { if (System.console() != null) { return System.console().readLine(format, args); } System.out.print(String.format(format, args)); BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); return reader.readLine(); } private char[] readPassword(String format, Object... args) throws IOException { if (System.console() != null) return System.console().readPassword(format, args); return this.readLine(format, args).toCharArray(); } 

При тестировании в Eclipse ваш пароль будет отображаться в ясном виде. По крайней мере, вы сможете протестировать. Просто не вводите свой реальный пароль во время тестирования. Держите это для использования в производстве;).

System.console() возвращает значение null, если консоль отсутствует.

Вы можете обойти это либо путем добавления слоя косвенности к вашему коду, либо путем запуска кода на внешней консоли и подключения удаленного отладчика .

Я также столкнулся с этой проблемой при попытке написать простое приложение командной строки.

Другой альтернативой созданию собственного объекта BufferedReader из System.in является использование java.util.Scanner следующим образом:

 import java.util.Scanner; Scanner in; in = new Scanner(System.in); String s = in.nextLine(); 

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

Вот еще документация по сканерам от Oracle .

Согласно документам :

Если виртуальная машина запускается автоматически, например, с помощью планировщика фоновых заданий, то обычно не будет консоли.

Согласно API :

«Я запускаю виртуальную машину из интерактивной командной строки, не перенаправляя стандартные входные и выходные streamи, тогда ее консоль будет существовать и, как правило, будет подключена к клавиатуре и дисплею, с которого была запущена виртуальная машина. Если виртуальная машина запущена автоматически, например, с помощью фонового планировщика заданий, то обычно у него не будет консоли. “

Я считаю, что в конфигурациях запуска для Eclipse вы можете настроить, нужно ли назначать консоль или нет – убедитесь, что это проверено. (Прошло некоторое время с тех пор, как я использовал Eclipse, поэтому я не могу дать конкретные инструкции, которых я боюсь).

Если это не сработает, то то, что определенно сделает это задание, запустит ваше приложение в режиме отладки, а затем подключится к процессу с помощью Eclipse. Найдите «удаленную отладку eclipse», если вы не знаете, как это сделать.

Кроме того, в общем случае плохой идеей является требование назначения консоли, поскольку это очень сильно влияет на гибкость вашего приложения – как вы только что обнаружили. Многие способы вызова Java не будут назначать консоль, и ваше приложение не будет использоваться в этих случаях (что плохо). Возможно, вы могли бы альтернативно разрешить аргументы в командной строке. (Если вы тестируете вход в консоль конкретно, то достаточно справедливы, но потенциально может быть полезно, чтобы люди могли вызывать ваше приложение из сценариев и / или на безгласных серверах, поэтому такой гибкий дизайн почти всегда является хорошей идеей Это часто приводит к получению более организованного кода.)

Получено это сообщение об ошибке при запуске приложения из Netbeans. Судя по другим ответам, похоже, это происходит при запуске приложения из среды IDE. Если вы посмотрите на этот вопрос: пытаясь читать с консоли на Java , это происходит потому, что

Большинство IDE используют javaw.exe вместо java.exe для запуска кода Java

Для получения Console используйте командную строку / терминал.

Это верно.

Вам нужно будет запустить приложение вне Eclipse. Посмотрите на панели конфигурации пусковой установки в Eclipse и посмотрите, можете ли вы определить параметр, который говорит, чтобы запустить команду в отдельной JVM.

add -console в аргументах вашей программы для запуска консоли OSGi

Interesting Posts
Давайте будем гением компьютера.