Я написал простой класс реализации:
public interface MyRemote extends Remote {
public String sayHello() throws RemoteException;
}
Затем класс удаленного сервера
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{
protected MyRemoteImpl() throws RemoteException {
}
public String sayHello() throws RemoteException {
return "Server says 'Hello World!'";
}
public static void main(String args[]) {
try {
MyRemote service = new MyRemoteImpl();
Naming.rebind("RemoteHello", service);
} catch (RemoteException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (MalformedURLException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
Теперь я прочитал, что rmiregistry нужно запустить по тому же пути, где исходные классыявляются (и их заглушки), поэтому я просто скомпилировал с использованием intllij IDEA и автоматически сгенерировал классы заглушки, затем скопировал все классы в мой путь Java, который имеет файл rmiregistry.exe, а затем запустил rmiregistry (я знаю, что это должно быть довольно глупометод, но я просто пытался заставить его работать в качестве теста).Я все еще получаю сообщение об ошибке, как указано в нижней части этого поста, всякий раз, когда я пытаюсь скомпилировать файл сервера.
В книге, из которой я работаю, говорится, что для создания заглушек и скелетов я использую команду rmic из java, но я не могу 'я не могу найти этот файл (может быть, он из более старой версии JAVA?), поэтому я просто использую Intellij IDEA для создания заглушки ... но файл скелета не создается.
Я уверен, что тамВ RMI есть несколько вещей, которые я не понимаю, но я просмотрел некоторые учебники в Интернете и не могу понять, что это такое, подумал, может быть, кто-то из stackoverflow может указать мне правильное направление.Любая помощь будет принята с благодарностью.
java.rmi.ServerError: Произошла ошибка в потоке сервера;Вложенное исключение: java.lang.UnsupportedClassVersionError: MyRemote: неподдерживаемая версия major.minor 51.0 в sun.rmi.server.UnicastServerRef.oldDispatch (неизвестный источник) в sun.rmi.server.UnicastServerRef.dispatch (неизвестный источник) в Sun..transport.Transport $ 1.run (неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в sun.rmi.transport.Transport.serviceCall (неизвестный источник) в sun.rmi.transport.tcp.TCPTransport.handleMessages (Неизвестный источник) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (неизвестный источник) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник) в java.lang.Thread.run (неизвестный источник) в sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:в sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:251) в sun.rmi.server.UnicastRef.invoke (UnicastRef.java:377) в sun.rmi.registry.RegistryImpl_Stub.rebind (неизвестный источник) в java.rmi.Naming.rebind (Naming.java:177) в MyRemoteImpl.main (MyRemoteImpl.java:27)at sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.intaf.jho.jj.invoke (Method.java:601) на com.intellij.rt.execution.application.AppMain.main (AppMain.java:120)