2012-12-07 59 views
1

我一直在尝试执行命令来运行RMI Hello world示例,但我失败了!在Mac OS X Lion中运行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

给我一个错误消息

Exception in thread "main" java.lang.NoClassDefFoundError: example/hello/Server Caused by: 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 java.lang.ClassLoader.loadClass(ClassLoader.java:247)

+0

我曾经在Windows中编辑类路径,但在这里我没有这样做,是否有必要? – Evanescence

+0

仍然需要帮助! – Evanescence

回答

0

我确实通过在新的终端窗口上运行每个命令来解决这个问题。 首先我从javac开始为.java文件,然后运行命令rmiregistry &。

第二我打开了一个新的终端窗口,并运行命令java的服务器类。

第三我打开了一个新的终端窗口,并运行Client类的命令java。

它适用于我!

0

在Mac上,在根目录下的用户目录与一个大写字母写的。

您写道:

file:/users/ha/RMI/

文件:/ 用户 /公顷/ RMI /是正确的。 这仅适用于已明确设置为忽略大小写的文件系统(不区分大小写)。至少下面的评论是这么说的。我无法亲自验证这一点。

许多情况下也需要类路径。这取决于你的依赖关系。但是,如果您需要Windows中的类路径,则需要在Mac上使用类路径。

根据你的.class文件的位置,我会添加classpath到你的调用中。

java -Djava.rmi.server.codebase=file:/users/ha/RMI/ -cp=/Users/ha/RMI example.hello.Server 

这是假设,当然,这个类文件在/用户/公顷/ RMI /例子/你好

看看目录内,以验证类文件的存在。它应该是您在javac命令和-d参数之后指定的目录。

+0

MacOS文件系统不区分大小写,所以不应该问题 – Mark

+0

将其编辑为:java -classpath/Users/ha/RMI/-Djava.rmi.server.codebase = file:/ Users/ha/RMI/example.hello.Server,但仍然收到相同的错误消息 – Evanescence

+0

我的MacOS文件系统被故意设置为区分大小写。 Mac OS Extended(区分大小写,日志记录)。这是iPhone开发更可靠的设置。对于使用〜ipad或〜iPad(或〜iphone /〜iPhone)的XIB文件,您不会在模拟器中出现问题,但设备会在其中一种情况下显示错误的结果(iPad无法在设备上工作)。这是验证这不是第一个问题的有效声明。 –