API консоли Java

Я попробовал java.io.Console API с помощью eclipse. Мой пример кода следует ниже.

package app;

import java.io.Console;

public class MainClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Console console = System.console(); 
        console.printf("Hello, world!!");
    }

}

Когда я попытался запустить пример, я получил следующую ошибку.

Исключение в потоке «main» java.lang.NullPointerException в app.MainClass.main (MainClass.java:11)

Где я ошибся? Спасибо.


person Bharani    schedule 15.06.2009    source источник


Ответы (3)


Поскольку вы упомянули в комментарии, что используете Eclipse, похоже, что в настоящее время нет поддержки для _ 1_ в Eclipse, согласно этому отчет об ошибке.

Метод System.console возвращает console, связанная с текущей виртуальной машиной Java, и если консоли нет, она вернет null. Из документации метода System.console:

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

Возврат:

Системная консоль, если есть, иначе null.

К сожалению, это правильное поведение. В вашем коде нет ошибки. Единственное улучшение, которое можно сделать, - это выполнить null проверку объекта Console, чтобы увидеть, было ли что-то возвращено или нет; это предотвратит NullPointerException, пытаясь использовать несуществующий объект Console.

Например:

Console c = System.console();

if (c == null) {
    System.out.println("No console available");
} else {
    // Use the returned Console.
}
person coobird    schedule 15.06.2009
comment
Просто придирка, но я бы использовал System.err.println вместо System.out.println - person Powerlord; 15.06.2009

System.console возвращает null, если вы не запускаете приложение в консоли. См. Предложения в этом вопросе.

person McDowell    schedule 15.06.2009
comment
Как это исправить? Должен ли я запускать приложение в командной строке и не использовать кнопку RUN в eclipse? - person Bharani; 15.06.2009
comment
Я обновил ответ ссылкой на аналогичный вопрос - вы можете обойти его с помощью внешних консолей, командных файлов и / или удаленной отладки. Также есть ссылка на проблему в базе данных ошибок Eclipse. - person McDowell; 15.06.2009

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

вы должны проверить, является ли консоль нулевой, прежде чем использовать ее.

person Pierre    schedule 15.06.2009