2011-01-30 3 views
2
import java.io.*; 
public class listjava 
{ 
    public static void main(String args[]){ 
     Console c = System.console(); 
     char[] pw; 
     pw = c.readPassword("%s","pw: "); 
     for (char ch: pw) 
      c.format("%c ",ch); 
     c.format("\n"); 

     MyUtility mu = new MyUtility(); 
     while(true) 
     { 
      String name = c.readLine("%s","input?: "); 
      c.format("output : %s \n",mu.doStuff(name)); 
     } 
    } 
} 

class MyUtility{ 
    String doStuff (String arg1){ 
     return " result is " + arg1; 
    } 
} 

Я получил сообщение об ошибке, как это:Что вызывает это исключение NullPointerException в моей программе Java?

Exception in thread "main" java.lang.NullPointerException 
    at listjava.main(listjava.java:7) 

Почему моя программа не так?

ответ

7

System.console() возвращается null.

Цитирование документации в Java:

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

Так что, вероятно, не консоль, связанные с вашей JVM. Вероятно, вы используете свою программу в пределах Eclipse или другие IDE. Попробуйте запустить вашу программу из командной строки вашей системы. Он должен работать.

Чтобы запустить программу из командной строки.

  1. Перейти в каталог, где listjava.class проживает переводчик
  2. Запуск Java в

    $ Java listjava

+0

Благодарю вас, вы правы. Еще один вопрос? Почему это неправильно, когда я использую IDE? благодаря! –

+0

Это не ** неправильно **. Это просто, что ваша ** IDE ** не дает ** JVM ** консоли при запуске программы внутри нее. –

3

Согласно Javadoc for System.console():

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

Так что я полагаю, что System.console() раздает обратно null и ваша линия

pw = c.readPassword("%s","pw: "); 

поэтому разыменования null. Я не уверен, какое исправление вы можете использовать; возможно, считая от System.in?