javac不为RMI创建存根
我正在为一个大学项目调查RMI,我遇到了一点问题。据我所知,java版本5及更高版本应该自动生成必要的存根文件(据我所知,之前还需要一个额外的步骤) 然而,在遵循本教程并使用Javac编译类之后,我只得到了标准类文件,没有存根文件的迹象 当我尝试运行我的项目时,我的应用程序崩溃了,说它找不到任何存根文件。我错过什么了吗 注意,运行javac不为RMI创建存根,java,rmi,javac,Java,Rmi,Javac,我正在为一个大学项目调查RMI,我遇到了一点问题。据我所知,java版本5及更高版本应该自动生成必要的存根文件(据我所知,之前还需要一个额外的步骤) 然而,在遵循本教程并使用Javac编译类之后,我只得到了标准类文件,没有存根文件的迹象 当我尝试运行我的项目时,我的应用程序崩溃了,说它找不到任何存根文件。我错过什么了吗 注意,运行java-version给了我以下信息: java version "1.6.0_21" Java(TM) SE Runtime Environment (build
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)
我相信你用的是
RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server);
在服务器中,而不是
RemoteInterface stub =
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0);
请注意
exportObject()
的两个参数——第二个版本返回不同的类型。这对我来说确实很重要。在>=5.0 JVM上不需要或不生成存根。
可能有些路径是错误的,本教程并不清楚如何设置目录/路径以及从何处运行内容
以下几点对我很有用:
~/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!
~/tmp$mkdir-p hello/example
~/tmp$vim hello/example/hello.java[在此处复制/粘贴hello.java的代码]
~/tmp$vim hello/example/Server.java[在此处复制/粘贴Server.java的代码]
~/tmp$vim hello/example/Client.java[在此处复制/粘贴Client.java的代码]
~/tmp$mkdir构建
~/tmp$javac-d build/hello/example/*.java
~/tmp$rmi注册表&
~/tmp$java-classpath build-Djava.rmi.server.codebase=file:build/example.hello.server&
服务器就绪
~/tmp$java-classpath build example.hello.Client
回答:你好,世界!
这里最重要的部分是,在构建和运行东西时,以及将正确的目录传递给classpath和-Djava.rmi.server.codebase时,您所处的目录。根据我的经验,rmi是一个让人头疼的问题。我在大学里得到的RMI作业是唯一一个讲师不介意提交的作业是否能够实际执行的作业……你误读了。从5.0开始,不需要存根文件。