2015-04-27 2 views
1

Я пытаюсь написать приложение переключения Java-сообщений с помощью многопоточного сервера и двух клиентов. Однако я застрял в какой-то момент, когда возникает ошибка при попытке запустить мои программы. Вот мои коды для сервера:Null Pointer Исключение при попытке запуска многопоточного сервера Java

public class EchoServer extends Thread { 

private static ServerSocket serverSocket; 
private static Socket connection1; 
private static Socket connection2; 
private BufferedReader input; 
private PrintWriter output; 
final static int portNumber = 4434; 

public EchoServer(Socket in,Socket out) throws IOException{ 

    connection1 = serverSocket.accept(); 

    connection2 = serverSocket.accept(); 

    input = new BufferedReader(new InputStreamReader(in.getInputStream())); 
    output = new PrintWriter(out.getOutputStream(),true); 
} 

public void run() 
{ 
    String inputLine; 

     while((inputLine=input.readLine())!=null){ 
      if(inputLine.equalsIgnoreCase("quit")) 
       break; 
      System.out.println("received:" + inputLine); 
      output.println(inputLine); 
     } 
      System.out.println("received quit,exiting"); 
    } 

public static void main(String args[]){ 


      serverSocket = new ServerSocket(portNumber); 

     System.out.println("listening on port:"+ portNumber); 

     EchoServer echoserver1 = new EchoServer(connection1,connection2); 
     EchoServer echoserver2 = new EchoServer(connection2,connection1); 
     echoserver1.start(); 
     echoserver2.start(); 

    } 
} 

Я также написал два класса для клиентов. Когда я запускаю сервер, а затем первый клиент, они работают так, как ожидалось. Однако, когда я пытаюсь запустить второй клиент, NullPointerException брошено, в отношении к следующим двум направлениям:

 input = new BufferedReader(new InputStreamReader(in.getInputStream())); 
     EchoServer echoserver1 = new EchoServer(connection1,connection2); 

Я знаю, что это довольно длинный кусок кодов, чтобы смотреть на, но я действительно застрял, как я не вижу проблемы здесь. Более ранняя однопоточная версия сервера, на которой я писал, работала без ошибок, поэтому я знаю, что есть что-то делать с многопоточным. Любая помощь и совет действительно оценены. Благодаря!

ответ

3

connection1 и connection2 никогда не инициализируется в методе main, следовательно, вы получите NullPointerException при вызове in.getInputStream() в конструкторе.

Не совсем уверен, что вы пытаетесь достичь, но похоже, что Вы могли бы хотеть, чтобы переместить эти две линии

connection1 = serverSocket.accept(); 
connection2 = serverSocket.accept(); 

к вашему методу main.

+1

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

+0

@Teee Отлично! Взгляните на это, если вы: http://stackoverflow.com/help/someone-answers –

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