我正在尝试运行此 Sun 教程中的示例代码:
http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html
我已将他们的所有代码准确复制到 Eclipse 项目中,并从终端运行“rmiregistry &”(我正在运行 OSX)。
当我尝试运行服务器时,我得到
Server exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: suntut.Hello
freenode 上的 #java 向我保证,注册表本身不需要了解有关我的类的任何信息。但似乎更奇怪的是,问题出在我的文件名或其他东西上——所有三个类在编译时都能很好地看到彼此,它们都在 Eclipse 项目中的同一个包中,等等。任何人都可以帮助我开始诊断这个问题吗?
更新: 我也尝试从命令行运行它。从/Users/[me]/workspace/[Projectname]/testing/我跑了
java suntut/Server
并得到了完全相同的错误。 (这是使用 javac 成功编译所有内容之后的结果)
最佳答案
如果这是您第一次使用 RMI,我建议您按照说明启动,不要更改任何内容(即,甚至不更改包名称)。这使得其他人可以轻松地帮助您,并且您犯错误的可能性也很低。
暂时放弃 Eclipse 并尝试按照教程中的说明进行操作。使用 IDE,您最终会将 IDE 和实际问题混为一谈。也就是说,运行 Java 类时必须使用完全限定的类名。如果测试是包名称的一部分,则必须使用 testing.suntut.Server
而不仅仅是 suntut.Server
。
关于java - 启动并运行 Java RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678525/