初学RMI出现一些问题的总结

因为项目需要,作为一个小白要开始学习RMI。废话不多说,列出运行RMI Demo时出现的一些问题以及解决方法,以便日后查阅。


一、运行环境

IDE使用的是IDEA 2018.1.5,JDK版本为10.0.1。

二、问题描述

1. java.net.ConnectException: Connection refused: connect

原因:启动RMI服务器端程序之前,没有运行注册表程序。

解决方法:因为在Java 1.5之后,JDK中已经集成了一个名为rmiregistry的可执行程序,如图1.1。因为注册表程序是包含在环境变量中的。我们要做的,就是在控制台中直接执行注册表程序,如图1.2,然后再运行客户端程序。

图1.1 rmiregistry应用程序位置

图1.2 运行注册表程序

2.java.rmi.UnmarshalException: error unmarshalling arguments

其实出现这一异常的完整语句如下:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: rmi.service.UserHandler

   ······
    at java.rmi.Naming.rebind(Naming.java:177)

在这里,UserHandler是我的远程对象。

原因:很明显,这是因为注册表程序没有找到远程对象类。

解决方法:在运行注册程序之前,需要先进入与远程对象同一个目录下。注意:此处所说的目录是classpath目录。如果不知道classpath地址,可以点击“File”-“Project Structure”-“Project Settings”-“Modules”,选择相应的Module。然后点击右侧的“Paths”标签栏,“Output path”后面的就是classpath了,如图1.3。

图1.3 classpath位置
​​​​

3. java.lang.UnsupportedClassVersionError: 你的远程对象 has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0

原因:这里写的很清楚了,编译出来的class文件版本为54.0,而当前Java运行最高只支持到52.0。

解决方案:其中JDK10的版本为54.0,JDK1.8的版本为52.0。所以,这里只需要修改JDK版本为1.8,然后重新编译一下就行了。


最后,推荐一下这篇博客 https://blog.csdn.net/lmy86263/article/details/72594760

这位博主写的内容对RMI初学者有很大的帮助。

猜你喜欢

转载自blog.csdn.net/qq_35004733/article/details/81080728