Java ServerSocket构造函数引发异常

Java ServerSocket构造函数引发异常,java,Java,} 这段代码给出了这个错误 package server; import java.net.*; import java.io.*; public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket =null; Socket socket; boolean listening = true; try

} 这段代码给出了这个错误

package server;

import java.net.*;
import java.io.*;


public class TCPServer {
public static void main(String[] args) throws IOException {
    ServerSocket serverSocket =null;
    Socket socket;
    boolean listening = true;

    try {
        serverSocket = new ServerSocket(4444);

    } catch (IOException e) {
        System.err.println("Cannot listen on port: 4444.");
    }

    while (listening){
        socket = serverSocket.accept(); 
    new TCPServerThread(socket).start();
    }
    serverSocket.close();
}

您应该在try块内移动accept循环。因为这样,如果ServerSocket无法侦听,那么变量ServerSocket将为null

Cannot listen on port: 4444.
Exception in thread "main" java.lang.NullPointerException
    at server.TCPServer.main(TCPServer.java:20)

请注意,我是如何将e.printStackTrace添加到catch块的,其中应该包含应用程序拒绝侦听端口4444的详细信息。很可能已经有另一个应用程序正在侦听此端口。

是的,我不知道为什么它会抛出NullPointerException,但当我刚刚调试并检查异常详细信息时,它是BindException,因为端口已在使用。

您正在捕获异常;为什么不检查它的内容呢?4444端口可能被另一个应用程序占用。请检查该端口。停止该应用程序或禁用该端口1。当你遇到异常情况时,不要只打印一些你自己设计的信息。打印异常信息:这将告诉您出了什么问题。现在你只是在问我们你自己信息的意义。我们知道的不比你多。毕竟,这是你的信息。2.取决于try块中代码成功与否的代码应该在同一try块中,而不是在catch块之后。不要编写这样的代码。您确定第一次没有打开套接字,而是停留在空白控制台上,以便重新运行程序,然后程序尝试从第一个未被注意到的打开的套接字打开已在使用的端口上的套接字,并引发异常吗?
package server;

import java.net.*;
import java.io.*;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket =null;
        Socket socket;
        boolean listening = true;

        try {
            serverSocket = new ServerSocket(4444);
            while (listening){
                socket = serverSocket.accept(); 
                new TCPServerThread(socket).start();
            }
        serverSocket.close();
        } catch (IOException e) {
            System.err.println("Cannot listen on port: 4444.");
            e.printStackTrace();
        }
    }