javac没有为RMI创建存根

时间:2011-01-19 22:11:38

标签: java rmi javac

我正在研究RMI的大学项目,我遇到了一些问题。从我读过的,java版本5及以上应该自动生成必要的存根文件(据我所知,以前需要额外的步骤)。

但是在按照本教程http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html并使用Javac编译我的类之后,我只获得了标准的类文件,没有我的存根文件的标志。

当我尝试运行我的项目时,我的应用程序崩溃,说它无法找到任何存根文件。我错过了什么吗?

注意,运行java -version给了我这个:

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)

2 个答案:

答案 0 :(得分:2)

我相信你使用了像

这样的东西
RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server);

在您的服务器中,而不是

RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0);

注意exportObject()的两个参数 - 第二个版本返回不同的类型。这对我来说确实有所不同。

答案 1 :(得分:1)

在> = 5.0 jvms上不需要或生成

存根。 可能有些路​​径是错误的,教程对于如何设置目录/路径以及从哪里运行东西都不是很清楚。

以下对我有用:

~/tmp$ mkdir -p hello/example
~/tmp$ vim hello/example/Hello.java [copy/paste the code of Hello.java here]
~/tmp$ vim hello/example/Server.java [copy/paste the code of Server.java here]
~/tmp$ vim hello/example/Client.java [copy/paste the code of Client.java here]
~/tmp$ mkdir build
~/tmp$ javac -d build/   hello/example/*.java
~/tmp$ rmiregistry &
~/tmp$ java -classpath build -Djava.rmi.server.codebase=file:build/ example.hello.Server &
Server ready
~/tmp$ java  -classpath build  example.hello.Client
response: Hello, world!

这里的重要部分是构建和运行东西时所处的目录,以及将正确的目录传递给classpath和-Djava.rmi.server.codebase。