java - 尝试运行 Java 多线程服务器时出现空指针异常

标签 java multithreading nullpointerexception serversocket

我正在尝试使用多线程服务器和两个客户端编写一个 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);

我知道这是一段相当长的代码,但我真的卡住了,因为我看不到这里的问题。我写的服务器的早期单线程版本没有错误,所以我知道多线程有一些事情要做。非常感谢任何帮助和建议。谢谢!

最佳答案

connection1connection2 永远不会在您的 main 方法中初始化,因此您在调用时会得到一个 NullPointerException in.getInputStream() 在你的构造函数中。

不完全确定您要实现的目标,但看起来您可能想要移动这两行

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

到您的 main 方法。

关于java - 尝试运行 Java 多线程服务器时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907588/

相关文章:

java - JNA 中的 Marshal.PtrToStructure 等效项

java - 如何重启JVM?

c++ - 线程数之间的事件c++

java - 什么是 NullPointerException,我该如何解决?

Android: java.lang.NullPointerException at android.graphics.Canvas.drawLine(Canvas.java:809) (可能与我的可绘制资源有关)

java - jasper 上的远程 MYSQL 报告错误 : com. 找不到 mysql.jdbc.Driver

java - 如何向 jvmmon 传递参数?

c++ - 为什么多线程更新数组没有加速

c++ - 如果我有固定数量的相互独立的计算,多线程是否会显着提高性能?

android - 终止应用程序后 API 响应的空对象引用。如果应用程序正确注销响应将起作用