You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:09:49