2016-01-01 3 views
0

Вот мой код:System.Console() NullPointerException

System.out.println("Enter Username : "); 
    String unm=System.console().readLine(); 

    System.out.println("Enter Password: "); 
    char[] pwd=System.console().readPassword(); 

    System.out.println("Welcome : "+""+" Your password is "+ new String(pwd)); 

Почему я geeting эту ошибку?

Введите имя пользователя:

Исключение в потоке "основного" java.lang.NullPointerException на Cons.main (Cons.java:13)

+0

13: линия 13, в будущем это поможет, если вы сообщите нам, какая строка это :) – user1445967

+2

смотрите здесь http://stackoverflow.com/questions/26078106/system-console-gives-nullpointerexception -в-NetBeans – Zia

ответ

1

Из Javadoc:

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

Как подать заявку?

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

Лучший способ взять вход есть,

Если вы хотите, чтобы прочитать имя пользователя из стандартного ввода, вы можете использовать этот код:

try { 
    System.out.print("Enter Username: "); 
    InputStreamReader streamReader = new InputStreamReader(System.in); 
    BufferedReader bufferedReader = new BufferedReader(streamReader); 
    String username = bufferedReader.readLine(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
1

Это происходит потому, System.console() возвращается нуль. Официальная документация состояния (полужирный мое подчеркнуть):

общественности статической консоли консоль()

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

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

Вы можете увидеть here

0

Вы должны использовать BufferedReader или Scanner класс для чтения входов из консоли.

BufferedReader:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class ReadConsoleSystem { 
    public static void main(String[] args) { 

    System.out.println("Enter something here : "); 

    try{ 
     BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); 
     String s = bufferRead.readLine(); 

     System.out.println(s); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

    } 
} 

Сканер:

import java.util.Scanner; 

public class ReadConsoleScanner { 
    public static void main(String[] args) { 

     System.out.println("Enter something here : "); 

     String sWhatever; 

     Scanner scanIn = new Scanner(System.in); 
     sWhatever = scanIn.nextLine(); 

     scanIn.close();    
     System.out.println(sWhatever); 
    } 
} 
0
String unm=System.console().readLine(); 

Вы должны сделать нулевой чек на System.Console первым. На платформах, где нет консоли, это приложение будет умирать с исключением нулевого указателя.

Нулевая проверка доступности консоли. Если нет, то прочитать с помощью сканера

String userName; 
    char[] password; 
    Scanner scanner = null; 
    Console console = System.console(); 
    if(console == null){ 
     scanner = new Scanner(System.in); 
     System.out.println("Enter username: "); 
     userName = scanner.next(); 
     //Read Password as well 
    }else{ 
     System.out.println("Enter username: "); 
     userName = console.readLine(); 
     //Read password as well 
    } 

Примечание:

  • Одно из преимуществ консоли, особенно при чтении пароля, он не будет отображаться на экране. С помощью сканера ваш пароль будет отображаться на экране.
  • Вышеприведенный фрагмент кода предназначен для демонстрации.
Смежные вопросы