2012-07-02 2 views
-2

У меня есть простой пример сервера сокетов, к которому пользователь подключается к нему и может или не может сразу отправить вход (в этом случае это не так). Java выдает исключение, и я не понимаю, почему.Java InputStreamReader/Reader throws NullPointerException

Вот код:

public static void main(String[] args) { 
    org.apache.log4j.PropertyConfigurator.configure("conf/log4j.properties"); 
    log.debug("Application started"); 

    try { 
     // Setup socket server 
     int port = 9999; 
     sv = new ServerSocket(port); 

     // Accept incoming sockets or block 
     Socket s = sv.accept(); 
     log.warn("Accepted new client connection!"); 

     InputStreamReader reader = new InputStreamReader(s.getInputStream(), "UTF-8"); 

     while(!reader.ready()) {} 

     char[] b = null; 
     reader.read(b); 
     log.warn(new String(b)); 

    } catch (Exception e) { 
     System.out.print(e.getMessage() + "\n"); 
     e.printStackTrace(); 
     System.exit(1); 
    } 
} 

И трассировки стека:

DEBUG [main] (Main.java:38) - Application started 
WARN [main] (Main.java:47) - Accepted new client connection! 
null 
java.lang.NullPointerException 
    at java.io.Reader.read(Reader.java:140) 
    at com.cinefyapp.Main.main(Main.java:51) 

Спасибо за помощь.

ответ

5

ваш char[] равно нулю, данные не могут быть считаны в null массив

char[] b = null;

+0

Я понимаю это, но если я просто использую 'char [] b;' компилятор выдает следующую ошибку: 'Локальная переменная b может быть не инициализирована'. Спасибо за ваш быстрый ответ! – user1495416

+0

Кроме того, добавление char в качестве свойства объекта Main (во избежание ошибки компилятора) приводит к тому, что генерируется одно и то же исключение. – user1495416

+1

@ user1495416 Итак, что заставило вас думать о том, что инициализация его явно «null» (a) когда-либо срабатывала и (b) не имела ничего общего с «NullPointerException?» – EJP

Смежные вопросы