尝试 运行 Java 多线程服务器时出现空指针异常
Null Pointer Exception while trying to run Java multi threaded server
我正在尝试使用多线程服务器和两个客户端编写 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);
我知道这是一段相当长的代码,但我真的卡住了,因为我看不到这里的问题。我写的服务器的早期单线程版本没有错误,所以我知道多线程有一些事情要做。非常感谢任何帮助和建议。谢谢!
connection1
和 connection2
永远不会在您的 main
方法中初始化,因此当您在构造函数中调用 in.getInputStream()
时,您会得到一个 NullPointerException
。
不完全确定您要实现的目标,但看起来您可能想要移动这两行
connection1 = serverSocket.accept();
connection2 = serverSocket.accept();
你的 main
方法。
我正在尝试使用多线程服务器和两个客户端编写 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);
我知道这是一段相当长的代码,但我真的卡住了,因为我看不到这里的问题。我写的服务器的早期单线程版本没有错误,所以我知道多线程有一些事情要做。非常感谢任何帮助和建议。谢谢!
connection1
和 connection2
永远不会在您的 main
方法中初始化,因此当您在构造函数中调用 in.getInputStream()
时,您会得到一个 NullPointerException
。
不完全确定您要实现的目标,但看起来您可能想要移动这两行
connection1 = serverSocket.accept();
connection2 = serverSocket.accept();
你的 main
方法。