nullpointerexception

bfhwhh0e  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(252)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
上个月关门了。
我在一个简单的客户机/服务器连接上练习。客户端应该向服务器发送一个int,服务器应该打印这个int。但是,服务器遇到nullpointerexception,并且不打印客户端发送的int。
这是我的服务器:

package primitives;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import bytes.Server;

public class DataServer {
private ServerSocket serverSocket;
private static DataInputStream in;

public DataServer(int port) throws IOException {
    serverSocket = new ServerSocket(port);
    System.out.println("Server ready at: " + serverSocket);
    Socket clientSocket = serverSocket.accept();

    System.out.println("New client connection: " + clientSocket);
    in = new DataInputStream(clientSocket.getInputStream());
}

public void close() throws IOException {
    serverSocket.close();
}

public static void main(String[] args) throws IOException {
    Server server = new Server(9000);
    int a = DataServer.in.readInt(); // NullPointerException Here
    System.out.println(a);
    server.close(); 
    System.out.println("closed");
}

}

我的委托人:

package primitives;

import java.io.IOException;
import java.net.Socket;
import java.io.DataOutputStream;

public class DataClient {

private Socket socket;
private DataOutputStream out;

public DataClient(String host, int port) throws IOException {
    socket = new Socket(host, port);
    System.out.println("Socket ready: " + socket);
    out = new DataOutputStream(socket.getOutputStream());
}

public void close() throws IOException {
    socket.close();
}

public static void main(String[] args) throws IOException {
    DataClient client = new DataClient("127.0.0.1", 9000); // use port configured in the server code
    client.out.writeInt(154);
    client.out.flush();
    client.close();
}

}

谢谢你的帮助。我一直在试图寻找解决方案,但找不到任何,因此,如果有一个解决方案很容易获得或如果这个问题已经提出,我很抱歉。

mlnl4t2r

mlnl4t2r1#

使用在构造函数中示例化的静态变量似乎有点无稽之谈。
变量 DataInputStream in 不应该是静态的,应该通过 DataServer 例如:

DataServer server = new DataServer(9000);
server.getIn().readInt();

此行为确保在使用对象属性之前对其进行示例化。

相关问题