Попытка отправить массивList через сокет, получить исключение нулевого указателя при инициализации потока ввода объекта (клиент).NullPointerException при получении списка массивов по сокету
Клиент:
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 Я планирую задокументировать себя лучше, когда у меня будет больше времени, но сейчас я действительно хотел бы понять, что происходит.
EDIT
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();
}
}
}
Недостаточно кода в этом вопросе, чтобы дать вам ответ. Пожалуйста, покажите нам, где 'Client.socket' определяется и создается экземпляр. Желательно опубликовать [SSCCE] (http://sscce.org), который демонстрирует проблему. –
Можете ли вы предоставить трассировку стека и показать номер строки, на которую он жаловался? Это обычно очень полезно в этих ситуациях. – CodeChimp
@ Duncan Ok попробует. @CodeChimp, трассировка стека указывает на '// здесь' в моем коде – Kalec