1

Netbeansを介してrmiチュートリアルをテストし、リモートサーバー(クライアントインターフェイス)をセットアップしようとしています。サーバーを実行すると、次の例外が表示されます。

例外:java.rmi.ServerException:サーバースレッドでRemoteExceptionが発生しました。ネストされた例外は次のとおりです。java.rmi.UnmarshalException:引数のアンマーシャリング中にエラーが発生しました。ネストされた例外は次のとおりです。java.lang.ClassNotFoundException:remotetests.MyRemoteInterface

rmiレジストリはバックグラウンドで実行されています。

サーバーがリモートオブジェクトを公開できないようです?? 以下は、サーバー、リモートインターフェイス、およびクライアントクラスです。

助けてください-ありがとう!

サーバークラスは次のようになります。

package remotetests;

import java.io.Serializable;

import java.net.InetAddress;

import java.rmi.*;

import java.rmi.registry.LocateRegistry;

import java.rmi.server.*;


public class MyRemoteClass extends UnicastRemoteObject implements MyRemoteInterface, serializable {

    public MyRemoteClass() throws RemoteException {

        //Constructor code

        System.out.println("MyRemote constructor");

    }

    public void myMethod1() throws RemoteException {

        //Here we put the code we want

        System.out.println("I am in myMethod1()");

    }

    public int myMethod2() throws RemoteException {

        return 5; //Here we put the code we want

    }

    public void anotherMethod() {

        //If we define another method, this can´t be called in a remote way unless we call it from the remote interface

    }
    public static void main(String[] args) {
        try {
            System.out.println("running main");
            MyRemoteInterface mir = new MyRemoteClass();
            InetAddress address = java.net.InetAddress.getLocalHost();
            System.out.println("host name : " + address.getHostName());

//Naming.rebind("//"+java.net.InetAddress.getLocalHost().getHostAddress() "/RMI_Test", mir);
            LocateRegistry.getRegistry().rebind("//"+java.net.InetAddress.getLocalHost().getHostAddress(), mir);

//System.out.println("Server started. Bound RMI test");

        } catch (Exception e) {

            System.err.println("exception: " + e);
        }
    }
}

リモートインターフェイスクラス:

package remotetests;

import java.rmi.*;

public interface MyRemoteInterface extends Remote {

    public void myMethod1() throws RemoteException;

    public int myMethod2() throws RemoteException;

}

クライアントクラス:

package remotetests;

public class MyRMIClient {

   public void MyRMIClient(String[] args){


        try{
            MyRemoteInterface mir = (MyRemoteInterface) java.rmi.Naming.lookup("//"+args[0] +":" +args[1]+"/RMITest");

            //MyRemoteInterface mir = (MyRemoteInterface) java.rmi.Naming.lookup("//127.0.0.1:1099/RMITest/");

            //We print myMethod1() as much as we get back myMethod2()

            int monitor = mir.myMethod2();

            for(int i=1;i<mir.myMethod2();i++){

                mir.myMethod1();

            }

        }catch (Exception e){

            e.printStackTrace();
        }  
    }
}*
4

0 に答える 0