在Mac OS X Lion中运行RMI Hello world失败

时间:2012-12-07 10:09:07

标签: java osx-lion rmi

我一直在尝试执行命令来运行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)

3 个答案:

答案 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)

是的,它对我有用。 (注意:目录应在终端中正确设置)