【发布时间】:2011-12-29 23:52:01
【问题描述】:
我写了一个简单的实现类:
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(我知道这一定是一个非常愚蠢的方法,但我只是想让它作为测试工作)。每当我尝试编译服务器文件时,仍然会收到本文底部列出的错误。
我正在使用的书说使用 java 的 rmic 命令来生成存根和骨架,但我找不到这个文件(也许它来自旧版本的 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.rmi.transport.Transport$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 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(Unknown Source) 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273) 在 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
【问题讨论】: