проблемы со сканером

#java #eclipse

#java #eclipse

Вопрос:

Я пишу Java-программу, которая будет принимать ввод int в качестве опции от пользователя. На основе входных данных программа перейдет к другому методу.Но когда я запускаю код, он выдает следующую ошибку

   Exception in thread "main" java.lang.NullPointerException
  at lab1.EchoClient.main(EchoClient.java:25)
  

часть моего кода

         private Scanner reader;
        public static void main(String[] args){

        EchoClient c = new EchoClient();
        int option;
        System.out.println("Welcome");
        System.out.println("Select one of the following options:");
        System.out.println("1 - Iterative Server");
        System.out.println("2 - Concurrent Server");
        System.out.println("3 - Exit");

        option = c.reader.nextInt(); // Line No 25
        switch(option){
        case 1: 
               c.iterative();//calls the iterative method
               break;
        case 2:
               //some method
               break;
        case 3:
               System.out.println ("bye bye");
               break;
        }//end of switch()
        }//end of main()

        public void iterative(){
               String address;
               String ip="";
               try{ 
                  System.out.println ("Please enter your correct ip address");
                  BufferedReader getip= new BufferedReader (newInputStreamReader(System.in));
                  ip=getip.readLine();
                  }
               catch (IOException error){
                   System.err.println("Error occured");
                }
  

В строке 25 находится строка : option = c.reader.nextInt();

Комментарии:

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

Ответ №1:

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

В вашем случае это должно выглядеть так:

 Scanner reader = new Scanner(System.in);
  

Затем, следуя вашему фрагменту кода, вы должны установить reader принадлежащий вашему экземпляру EchoClient для built Scanner .

Ответ №2:

reader никогда не инициализируется, поэтому он по-прежнему равен нулю.

Ответ №3:

Похоже, что когда вы создаете свой новый EchoReader c , он не устанавливает reader атрибут — затем, когда вы пытаетесь c.reader , вы получаете null , что приводит к NPE при вызове nextInt() . Дважды проверьте, что ваш EchoReader конструктор устанавливает reader атрибут.

Ответ №4:

насколько я могу судить, reader никогда не инициализируется

Ответ №5:

…вы определили свой собственный сканер для чтения? Считыватель сканера = новый сканер (System.in );