我试图在我的eclipse上运行一个简单的Java RMI,但每次我都得到不同的错误。如果我通过CMD运行我的源代码(我在Windows上),它可以工作,但我更喜欢在Eclipse上运行我的代码,因为它更舒适!
这是代码:
接口
package rmiproject;
import java.rmi.*;
public interface HelloIn extends Remote {
public String ciao(String name) throws RemoteException;
}
服务器
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();
}
}
}
客户端
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上运行它时,这些是我遵循的步骤:
- 首先,我为我的JDK设置一个路径,然后启动 rmiregistry。
- 然后我打开另外两个窗口,启动服务器,然后启动客户端。
javac rmiproject/Server.java
java rmiproject.Server
客户端在不同的窗口上也是如此。
1条答案
按热度按时间kulphzqa1#
以这种方式固定: