NullPointerException в консоли readLine () - PullRequest
5 голосов
/ 17 декабря 2009

Это:

Console c = System.console();
        String readline;
        String u = c.readLine("%s", "args");

Бросает NullPointerException. Все же подпись метода:

 public String readLine(String fmt, Object... args)

Почему выдается это исключение?

Ответы [ 7 ]

17 голосов
/ 17 декабря 2009
Console c = System.console();

Ноль c? 1003 *

Doc

общедоступная статическая консольная консоль ()

Возвращает уникальный объект консоли. связано с текущей Java виртуальная машина, если есть.

Возвращает: системная консоль, если есть, в противном случае ноль .

4 голосов
/ 13 июня 2010

через: http://www.codeguru.com/forum/showthread.php?t=487190 для детализации

Перед использованием метода всегда полезно прочитать документы API о том, что делает метод. Например, документы для метода console () говорят:

Цитата:

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

Если у этой виртуальной машины есть консоль тогда он представлен уникальным Экземпляр этого класса, который может быть полученный путем вызова Метод System.console (). Если нет консоли устройство доступно затем вызов этого метода вернет значение null. этого метода вернет значение null.

Если вы попытаетесь вызвать программу из командной строки с помощью команды java, то у нее будет консоль, и метод не должен возвращать null. Этот метод вернет null.

В качестве альтернативы, использование класса Scanner будет работать внутри вашей IDE:

Scanner sc = new Scanner(System.in);

4 голосов
/ 17 декабря 2009

NullPointerException - это RuntimeException, что означает, что его не нужно объявлять в сигнатуре метода.

2 голосов
/ 17 декабря 2009

System.console () вернул null, это единственная строка в этом фрагменте кода, которая могла вызвать исключение нулевого указателя.

2 голосов
/ 17 декабря 2009

Является ли c ноль как-то?

Кстати, ваш оператор readLine эквивалентен c.readLine("args") - это то, что вы намереваетесь?

1 голос
/ 12 января 2017

Поскольку System.console() - это null в используемой вами среде IDE. Попробуйте java.util.Scanner вместо:

import java.util.Scanner;
Scanner s = new Scanner(System.in);
String u = s.nextLine();
1 голос
/ 17 декабря 2009

Что-то странное в фрагменте кода. Вы объявляете переменную readline, но не инициализируете ее и не используете.

Возможно ли, что в программе вы как-то используете эту переменную без ее инициализации? (длинный выстрел, я знаю)

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