Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javac不为RMI创建存根_Java_Rmi_Javac - Fatal编程技术网

javac不为RMI创建存根

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

我正在为一个大学项目调查RMI,我遇到了一点问题。据我所知,java版本5及更高版本应该自动生成必要的存根文件(据我所知,之前还需要一个额外的步骤)

然而,在遵循本教程并使用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)

我相信你用的是

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开始,不需要存根文件。