У меня есть сервер Java, который отправляет некоторые данные через сокет клиенту, разработанному в Android.Отправленные данные сериализуются ... и на стороне клиента при попытке чтения из ObjectInputStream я получаю следующую ошибку:
java.lang.ClassNotFoundException: servers.Coordinate
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:237)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2604)
at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1860)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:840)
at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2080)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:943)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:2299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2254)
at com.Server_1.ClientThread_special.run(ClientThread_special.java:30)
at java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.NoClassDefFoundError: servers.Coordinate
Caused by: java.lang.ClassNotFoundException: servers.Coordinate in loader dalvik.system.PathClassLoader@43d02e18
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
Теперь вот мой код на стороне сервера:
clientSocket = serverSocket.accept();
System.out.println("S-a conectat clientul de monitorizare!");
os=new ObjectOutputStream(clientSocket.getOutputStream());
try{
while(true){
coord=(Coordinate)queue.take();
System.out.println(coord.getLat());
os.writeObject(coord);
os.flush();
}
}
catch(Exception e)
{
e.printStackTrace();
}
На стороне клиента у меня есть это:
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Socket socket = new Socket(serverIpAddress, serverPort);
is=new ObjectInputStream(socket.getInputStream());
try{
while(!stop){
coord=(Coordinate)is.readObject();
System.out.println("Date de la clientul de monitorizare:"+coord.getLat());
}
}
catch(Exception e)
{
e.printStackTrace();
}
is.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
А вот мой сериализуемый класс, у меня он есть как на стороне клиента, так и на стороне сервера:
public class Coordinate implements Serializable{
private final double lon;
private final double lat;
private final int workerId;
public Coordinate(double lat, double lon, int workerId) {
this.lat = lat;
this.lon = lon;
this.workerId=workerId;
}
public double getLon() {
return lon;
}
public double getLat() {
return lat;
}
public int getwId(){
return workerId;
}
}
Экземпляр этого класса - это то, что я посылаю через сокет.
РЕДАКТИРОВАТЬ:
на сервере У меня есть следующее:
серверы пакетов;
import java.io.Serializable;
открытый класс Coordinate реализует Serializable {
private final double lon;
private final double lat;
private final int workerId;
public Coordinate(double lat, double lon, int workerId) {
this.lat = lat;
this.lon = lon;
this.workerId=workerId;
}
public double getLon() {
return lon;
}
public double getLat() {
return lat;
}
public int getwId(){
return workerId;
}
}
на стороне клиента. У меня есть следующее:
package com.Server_1;
import java.io.Serializable;
открытый класс Coordinate реализует Serializable {
private final double lon;
private final double lat;
private final int workerId;
public Coordinate(double lat, double lon, int workerId) {
this.lat = lat;
this.lon = lon;
this.workerId=workerId;
}
public double getLon() {
return lon;
}
public double getLat() {
return lat;
}
public int getwId(){
return workerId;
}
}
Я не понимаю, как я могу изменить пакет, чтобы он был одинаковым на обоих из них !!!!!!