Eclipse运行Java RMI程序报错,CMD可正常运行的问题求助
Eclipse运行Java RMI程序报错,CMD可正常运行的问题求助
各位好,我现在在Eclipse里运行一个简单的Java RMI程序,但每次都会遇到不同的错误。奇怪的是,在Windows的CMD里运行源码完全没问题,但我更习惯用Eclipse,所以想解决这个问题!
我的代码
远程接口(HelloIn.java)
package rmiproject; import java.rmi.*; public interface HelloIn extends Remote { public String ciao(String name) throws RemoteException; }
服务器端代码(Server.java)
package rmiproject; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class Server extends UnicastRemoteObject implements HelloIn { protected Server() throws RemoteException { super(); // TODO Auto-generated constructor stub } /** * */ @Override public String ciao(String name) throws RemoteException { // TODO Auto-generated method stub String output= "Server dice ciao "+name; return output; } private static final long serialVersionUID = 1L; public static void main(String[] args) { // TODO Auto-generated method stub System.setProperty("java.rmi.server.hostname","myipaddress"); try { Naming.rebind("//localhost/Server", new Server()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
客户端代码(Client.java)
package rmiproject; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; public class Client { private static HelloIn lookup; public static void main(String[] args) { // TODO Auto-generated method stub try { lookup= (HelloIn) Naming.lookup("//localhost/Server"); String s= lookup.ciao("peppe"); System.out.println(s); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Eclipse中运行出现的错误
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make public abstract java.lang.String rmiproject.HelloIn.ciao(java.lang.String) throws java.rmi.RemoteException accessible: module Rmi does not "exports rmiproject" to module java.rmi at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:315) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:203) at java.base/java.lang.reflect.Method.setAccessible(Method.java:197) at java.rmi/sun.rmi.server.UnicastServerRef$HashToMethod_Maps$1.run(UnicastServerRef.java:598) at java.rmi/sun.rmi.server.UnicastServerRef$HashToMethod_Maps$1.run(UnicastServerRef.java:596) at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) at java.rmi/sun.rmi.server.UnicastServerRef$HashToMethod_Maps.computeValue(UnicastServerRef.java:595) at java.rmi/sun.rmi.server.UnicastServerRef$HashToMethod_Maps.computeValue(UnicastServerRef.java:574) at java.rmi/sun.rmi.server.WeakClassHashMap.get(WeakClassHashMap.java:74) at java.rmi/sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:236) at java.rmi/java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:473) at java.rmi/java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:358) at java.rmi/java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:230) at java.rmi/java.rmi.server.UnicastRemoteObject.<init>(UnicastRemoteObject.java:212) at Rmi/rmiproject.Server.<init>(Server.java:10) at Rmi/rmiproject.Server.main(Server.java:29)
CMD中正常运行的步骤
我在CMD里是这么操作的:
- 首先设置JDK的路径,然后启动
rmiregistry - 再打开两个新的CMD窗口,分别启动服务器和客户端:
客户端也是同样的编译运行步骤,在另一个窗口执行。javac rmiproject/Server.java java rmiproject.Server
备注:内容来源于stack exchange,提问作者MrAlex
相关产品推荐
相关产品推荐

