我正在学习RMI,我已经做了一些类似以下的事情:
接口
import java.rmi.*;
public interface IRemote extends Remote {
public void say() throws RemoteException;
}
服务器
import java.rmi.*;
import java.rmi.server.*;
public class Server extends UnicastRemoteObject implements IRemote{
public Server() throws RemoteException{}
public void say() throws RemoteException{
System.out.println("I am saying Hello World...");
}
public static void main (String[] argv) {
try {
Naming.rebind ("myserver", new Server());
System.out.println ("Server is ready.");
} catch (Exception e) {
System.out.println ("Hello Server failed: " + e);
}
}
}
客户端
import java.rmi.*;
class Client{
public static void main(String args[]){
try{
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
obj.say();
}catch(Exception e){
System.out.println("Exception : "+e);
}
}
}
首先,我要启动RMI注册表才能运行。
start rmiregistry
然后 java Server
最后 java Client
当我将这三个文件放在同一个包中时,一切都很好。但是这不是RMI的全部。我应该能够将Client放在其他机器或位置上,然后从那里调用Server方法。
但是,当我更改Client.java的包并尝试编译它时,我会收到错误:
Client.java:6: error: cannot find symbol
IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver");
symbol: class IRemote
location: class Client
它说找不到IRemote,而IRemote存在于Server的包中。我想知道如何使此功能正常工作?无论是Client和Server在不同的包中还是在不同的机器上?