Java 需要帮助更好地理解RMI吗

Java 需要帮助更好地理解RMI吗,java,rmi,Java,Rmi,我正在学习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 IRemot

我正在学习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注册表

启动注册表
然后
java服务器
然后
java客户端

  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的全部内容。我应该能够将客户机放在其他机器或其他位置,然后从那里调用服务器方法

但是当我更改Client.java的包并尝试编译它时,我得到了错误:

Client.java:6:错误:找不到符号
IRemote obj=(IRemote)Naming.lookup(“rmi://MYPCNAME/myserver");
symbol:class IRemote
位置:类客户端

  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);
            }
       }
 }

它说它找不到IRemote,它存在于服务器的包中。我想知道,我怎样才能使这东西正常工作?客户端和服务器都在不同的软件包或机器上?

我怀疑问题在于缺少
import
语句


客户端
IRemote
位于同一个包中时,您无需导入即可引用它。一旦你移动了接口,你的
客户端
类就不知道如何找到它了。

好吧,我很清楚。。。!但是,当我们将客户机程序移动到另一台机器和另一台机器上的服务器时,会发生什么呢?那个么你们认为你们将如何导入这个接口呢?(RMI的全部内容)将您的接口打包到一个JAR中,然后针对该JAR编译您的客户机和服务器。您想说,我们确实需要双方的接口吗?客户端和服务器端?不,两边都需要接口。没关系!:)你确定这件事吗?在标准的JavaRMI工作方式中,接口应该在双方都可用吗?有推荐人吗?