【发布时间】:2010-10-05 02:58:08
【问题描述】:
我编写了简单的 RMI 代码来了解它的工作原理。 虽然编译 java 代码一切正常,但 rmic 它并运行 rmiregistry 并从控制台运行客户端代码工作正常,但是当我从 Eclipse 的客户端代码上选择“作为 Java 应用程序运行”时,它会抛出 MarshallException。
我的猜测是 Eclipse 正在编译不同的版本,根据:
我检查了 Eclipse 编译器设置,上面写着1.6。
(右键Project Explorer并选择“project facets”然后你会看到Eclipse正在编译java文件的版本)
我的 Java 是 1.6,因此无论从控制台和 Eclipse 编译代码,都应该生成 1.6 版本编译的类文件。 (javap -verbose | grep -i version 调出版本50,相当于1.6)
有没有人遇到过同样的问题并对此有解释?
可能没有必要,但工作代码如下。
客户端代码
package com.masatosan.remote.client;
import java.rmi.Naming;
import java.rmi.RemoteException;
import com.masatosan.remote.server.MyRemoteServer;
public class MyRemoteClient {
public static void main(String[] args) {
new MyRemoteClient().go();
}
public void go() {
try {
MyRemoteServer service = (MyRemoteServer) Naming.lookup("rmi://127.0.0.1/MyFirstRemoteService");
String s = service.sayHello();
System.out.println(s);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
服务器代码
package com.masatosan.remote.server;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteServerImp extends UnicastRemoteObject implements MyRemoteServer {
public static void main(String[] args) {
try {
MyRemoteServer service = new MyRemoteServerImp();
Naming.rebind("MyFirstRemoteService", service);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public MyRemoteServerImp() throws RemoteException {}
@Override
public String sayHello() throws RemoteException {
return "Hi I'm server!";
}
}//
存根的服务器代码接口
package com.masatosan.remote.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemoteServer extends Remote {
public String sayHello() throws RemoteException;
}
【问题讨论】:
标签: java eclipse version compilation rmi