我一直在尝试执行命令来运行RMI Hello world示例,但我失败了!
我的执行步骤来自此处:http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html
命令是:
javac
:工作正常,我得到了类文件rmiregistry &
:我得到类似[1] 17122
java -Djava.rmi.server.codebase=file:/users/ha/RMI/ example.hello.Server
:给我一条错误消息
线程“main”中的异常java.lang.NoClassDefFoundError: example / hello / Server引起:java.lang.ClassNotFoundException: example.hello.Server at java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:190)at java.lang.ClassLoader.loadClass(ClassLoader.java:306)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)at at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
答案 0 :(得分:1)
我通过在新终端窗口上运行每个命令来解决此问题。 首先,我开始使用javac获取.java文件,然后运行命令rmiregistry&。
其次,我打开了一个新的终端窗口,并为Server类运行命令java。
第三,我打开了一个新的终端窗口,并为Client类运行命令java。
它和我合作!
答案 1 :(得分:0)
在Mac上,根目录中的Users目录使用大写字母。
您写道:
文件:/ 用户强> /公顷/ RMI /
文件:/ 用户 / ha / RMI /是正确的。 这仅适用于已明确设置为忽略大小写的文件系统(不区分大小写)。至少这是以下评论所说的。我自己无法验证。
在许多情况下也需要类路径。这取决于你的依赖关系。但是如果你需要在Windows中使用类路径,那么你需要在Mac上使用类似路径。
根据.class文件的位置,我会将类路径添加到您的调用中。
java -Djava.rmi.server.codebase=file:/users/ha/RMI/ -cp=/Users/ha/RMI example.hello.Server
当然,这假设类文件位于/ Users / ha / RMI / example / hello
下只需查看目录内部以验证类文件是否存在。它应该是您在javac命令和-d参数之后指定的目录。
答案 2 :(得分:0)
我使用了三个终端窗口来执行rmiregistry程序。
1。使用此终端窗口来编译所有文件(javac filename.java),并使用命令“ rmiregistry&”,这是与Windows等效的“ start rmiregistry”命令。 (注意:“启动”命令在macOS上不起作用)
2。使用它来运行Java文件,即。服务器文件(即Java RMI_Server)
3。使用此命令运行客户端文件。客户端文件(即Java RMI_Client 127.0.0.1)
是的,它对我有用。 (注意:目录应在终端中正确设置)