gpt4 book ai didi

java - 通过套接字接收数组列表时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 07:11:38 25 4
gpt4 key购买 nike

尝试通过套接字发送 arrayList,在对象输入流初始化(客户端)时出现空指针异常。

客户:

try {
ObjectInputStream objIn = new ObjectInputStream(
Client.socket.getInputStream()); // HERE
library = (ArrayList<Book>) objIn.readObject();
} catch (IOException e) {

服务器:

try {
ObjectOutputStream objOut = new ObjectOutputStream(
this.client.getOutputStream());
objOut.writeObject(library);
objOut.flush(); // added later, not helping
}

这两天我一直在尝试通过套接字进行通信,但几乎没有成功。我不知道发生了什么事。 Ofc 我计划在我有更多时间时更好地记录自己,但现在我真的很想了解正在发生的事情。

编辑

public class Client {

private static int port = 6666;
private static Socket socket = null;

public Client (int port) {
Client.port = port;
}

public Client () {
}

public void establishConnection() {
try {
Client.socket = new Socket(InetAddress.getByName(null), Client.port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

服务器:

public void start () {
(new Thread() {
public void run() {
try {
Server.socket = new ServerSocket(Server.portNumber);
while (!Server.stop) {
Socket client = Server.socket.accept();
(new HandleRequest (client)).start();
}
...............


public class HandleRequest extends Thread {

private Socket client = null;
private SQL sql_db = new SQL ();

public HandleRequest (Socket client) {
this.client = client;
}

@Override
public void run () {
try {
if (!this.sql_db.isConnected())
this.sql_db.connect();
if (this.client == null) {
System.out.println("Error: client does not exist, NO idea what's going on");
return;
}



ArrayList<Book> library = this.sql_db.getAllBooks();
try {
ObjectOutputStream objOut = new ObjectOutputStream(
this.client.getOutputStream());
objOut.writeObject(library);
objOut.flush();
} catch (Exception e) {
System.out.println("Server error in handling request for whole library!");
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

因为NPE在这条线上:

Client.socket.getInputStream());

只有一件事可以导致它。它不能是Client,因为那是static。它不能是 getInputStream(),因为那是一个方法,所以它必须是导致 NPE 的 socket

在这一行:

private static Socket socket = null;

您将 socket 设置为 null。我唯一看到您将其设置为非空的地方是在您的 .establishConnection() 方法中,但我看不到您在哪里调用该方法。

因此,您的问题很可能是您没有调用 .establishConnection() 方法。

关于java - 通过套接字接收数组列表时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com