有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助才能更好地理解RMI

我正在学习RMI,我做了如下工作:

Interface

import java.rmi.*;

public interface IRemote extends Remote {
    public void say() throws RemoteException;
}

Server

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

Client

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

但当我改变客户的包装时。java,我试图编译它,我得到了错误:

Client.java:6: error: cannot find symbol IRemote obj = (IRemote) Naming.lookup ("rmi://MYPCNAME/myserver"); symbol: class IRemote location: class Client

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


共 (1) 个答案

  1. # 1 楼答案

    我怀疑问题在于缺乏import声明

    ClientIRemote在同一个包中时,您可以引用它,而无需导入它。一旦移动了接口,Client类就不再知道如何找到它