【问题标题】:Null Pointer Exception while trying to run Java multi threaded server尝试运行 Java 多线程服务器时出现空指针异常
【发布时间】:2015-04-27 23:13:13
【问题描述】:

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

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

【问题讨论】:

    标签: java multithreading nullpointerexception serversocket


    【解决方案1】:

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

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

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

    到您的main 方法。

    【讨论】:

    • 非常感谢!在我按照您的建议移动这些行后,它立即起作用。我正在尝试编写两个消息切换客户端,它们可用于基于多线程服务器相互发送消息。它还没有完成,但你的回答真的很有帮助。再次感谢!
    • @Teee 太棒了!如果你愿意的话,看看这个:stackoverflow.com/help/someone-answers
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多