Я сейчас работаю над rmi, но у меня возникла проблема, как только я вызываю метод моего удаленного объекта. На самом деле у меня есть метод, который позволяет мне восстановить список заметок об автомобиле, а заметка состоит из заметки и комментария.
вот мой класс и интерфейс:
Примечание интерфейс:
public interface Vehicle extends Remote {
public String getComment() throws RemoteException;
public int getNote() throws RemoteException;
}
Класс примечания:
public class Note extends UnicastRemoteObject implements NoteInterface, Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private final String comment;
private final int note;
public Note(String comment, int note) throws RemoteException {
super();
if (note < -1) {
throw new IllegalArgumentException("Invalid input");
}
this.comment = comment;
this.note = note;
}
@Override
public final String getComment() throws RemoteException{
return comment;
}
@Override
public final int getNote() throws RemoteException {
return note;
}
}
Интерфейс автомобиля:
public interface Vehicle extends Remote {
public void addNote(NoteInterface note) throws RemoteException;
public List<NoteInterface> getListNote() throws RemoteException;
}
Класс автомобиля:
public class Car extends UnicastRemoteObject implements Vehicle {
/**
*
*/
private static final long serialVersionUID = 1L;
private final List<NoteInterface> listNotes;
public Car(){
this.listNotes = new ArrayList<>();
}
@Override
public final void addNote(NoteInterface note) throws RemoteException {
Objects.requireNonNull(note, "Note can't null");
listNotes.add(note);
}
@Override
public List<NoteInterface> getListNote() throws RemoteException {
return listNotes;
}
}
Класс сервера:
public class Server {
public static void main(String[] args) throws UnknownHostException, RemoteException, MalformedURLException {
Registry registry = LocateRegistry.createRegistry(1099);
Vehicle v = new Car();
String url = "rmi://" + InetAddress.getLocalHost().getHostAddress() + "/project";
registry.rebind(url+"/vehicles", v);
System.out.println(url);
}
}
Класс клиента:
public class Client {
public static void main(String[] args) throws NotBoundException, IOException{
String url = "rmi://" + InetAddress.getLocalHost().getHostAddress() +,"/project";
Registry registry = LocateRegistry.getRegistry();
Vehicle v = (Vehicle ) registry.lookup(url + "/vehicles");
}
Клиентская сторона, если я это сделаю:
v.addNote (новая заметка («Этот автомобиль великолепен», 10));
v.addNote (новая заметка («этот автомобиль очень плохой», 0));
v.getListNote () размер (). // это показывает мне 2
Если я это сделаю:
* * 1033 System.out.println (v.getListNote () получить (0).); // это показывает мне
Proxy [NoteInterface, RemoteObjectInvocationHandler [UnicastRef [liveRef:
[Конечная точка: 192.168.1.11: +51593, ObjId: [- 25af4c2d: 166df1339f1: -7ffd,
1351068100677398612]]]]]
И как только я вызову метод заметки, например:
System.out.println (list.get (0) .getComment ()
У меня есть java.rmi.ConnectException
Исключение в потоке "AWT-EventQueue-0"
java.lang.IllegalArgumentException: java.rmi.ConnectException:
Отказано в соединении с хостом: 192.168.1.11; Вложенное исключение:
java.net.ConnectException: в соединении отказано: connect
Я не понимаю, откуда возникла эта проблема, и я не знаю, как ее решить.
Если у кого-то есть идея, спасибо за помощь.