3

私は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

これら3つすべてを同じパッケージに入れている場合、このことは正常に機能しています。しかし、それはRMIのすべてではありません。クライアントを他のマシンまたは他の場所に配置し、そこからサーバーメソッドを呼び出すことができるはずです。

しかし、Client.javaのパッケージを変更してコンパイルしようとすると、次のエラーが発生します。

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

サーバーのパッケージに含まれているIRemoteが見つからないと表示されます。知りたいのですが、どうすればこれを正しく機能させることができますか?異なるパッケージまたはマシン上のクライアントとサーバーの両方?

4

1 に答える 1

2

import問題は声明の欠如だと思います。

Clientと同じパッケージに含まれている場合は、IRemoteインポートせずに参照できます。インターフェースを移動するとすぐに、Clientクラスはそれを見つける方法を知りませんでした。

于 2012-09-26T07:19:46.163 に答える