【问题标题】:Run RMI Hello world in Mac OS X Lion Failed在 Mac OS X Lion 中运行 RMI Hello world 失败
【发布时间】:2012-11-25 12:06:21
【问题描述】:

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

给我一​​个错误信息

线程“主”java.lang.NoClassDefFoundError 中的异常: 示例/hello/Server 引起:java.lang.ClassNotFoundException: example.hello.Server 位于 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)

【问题讨论】:

  • 我以前在windows中编辑类路径,但是在mac我没有这样做,有必要吗?

标签: java osx-lion rmi


【解决方案1】:

在 Mac 上,根目录下的 Users 目录用大写字母书写。

你写道:

文件:/用户/ha/RMI/

file:/Users/ha/RMI/ 是正确的。 这仅适用于已明确设置为忽略大小写(不区分大小写)的文件系统。至少下面的cmets是这么说的。我自己无法验证。

在许多情况下也需要类路径。这取决于您的依赖项。但如果您需要 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 参数之后指定的目录。

【讨论】:

  • MacOS 文件系统不区分大小写,所以应该没关系
  • 将其编辑为:java -classpath /Users/ha/RMI/ -Djava.rmi.server.codebase=file:/Users/ha/RMI/example.hello.Server,但仍然得到同样的错误信息
  • 我的 MacOS 文件系统被有意设置为区分大小写。 Mac OS 扩展(区分大小写,记录)。对于 iPhone 开发来说,这是一个更可靠的设置。对于使用 ~ipad 或 ~iPad(或 ~iphone/~iPhone)的 XIB 文件,您在模拟器中不会有问题,但设备会在其中一种情况下显示错误的结果(iPad 无法在设备上运行)。这是一个有效的声明,首先验证这不是问题。
  • 那么问题应该出在你的类路径上。
  • 确保您的目标是类文件所在的目录,而不是 java 文件。
【解决方案2】:

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

其次,我打开一个新的终端窗口并为 Server 类运行命令 java。

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

它对我有用!

【讨论】:

    【解决方案3】:

    我使用三个终端窗口来执行一个 rmiregistry 程序。

    1.使用此终端窗口编译所有文件(javac 文件名.java)并使用命令“rmiregistry &”这是“启动 rmiregistry”的 Windows 等效命令。 (注意:'start' 命令在 macOS 上不起作用)

    2.使用它来运行java文件,即。服务器文件(即java RMI_Server)

    3.使用它来运行客户端文件,即。客户端文件(即 java RMI_Client 127.0.0.1)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 2013-02-12
      • 2012-06-09
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2012-01-15
      • 2021-01-18
      相关资源
      最近更新 更多