我正在研究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)
答案 0 :(得分:2)
我相信你使用了像
这样的东西RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server);
在您的服务器中,而不是
RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0);
注意exportObject()
的两个参数 - 第二个版本返回不同的类型。这对我来说确实有所不同。
答案 1 :(得分:1)
存根。 可能有些路径是错误的,教程对于如何设置目录/路径以及从哪里运行东西都不是很清楚。
以下对我有用:
~/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。