1

RMI サーバーを実行し続けるにはどうすればよいですか? 現在、バインドしてオブジェクトを作成してから終了します..

public class WutServer {
  public static void main(String[] args) throws RemoteException {
    Registry registry = LocateRegistry.createRegistry(1099);
    try {
      registry.bind("WutManager", new WutManager());
      System.out.println("Ready..");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

私は単にこのクラスを実行しています。私はrmicなどを実行しませんでした..

強制的に実行し続けるにはどうすればよいですか?

4

5 に答える 5

2

これを試して:

Remote stub = UnicastRemoteObject.exportObject(new WutManager(), 0);
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("WutManager", stub);

注:WutManagerはjava.rmi.Remoteを実装する必要があります。

于 2011-03-02T09:22:42.553 に答える
1

サーバーは DGC されてから GC されます。これによりサーバーはアンエクスポートされ、最終的に JVM は他に何もすることがなければ終了します。これを止めるには、 を介してレジストリを作成している場合はLocateRegistry.createRegistry()、そのメソッドの戻り値を静的変数に保持します。それ以外の場合は、サーバー オブジェクトへの静的参照を保持します。

于 2011-03-22T05:46:01.567 に答える
0

これは古い質問ですが、ここに新しい回答があります。

OSX で最新の Java 9.0.4 を使用すると、プログラムが終了することがわかりました。最新の Java 1.8.0.162 を使用すると終了せず、サーバーは実行されたままになります。

于 2018-02-02T16:41:22.357 に答える
-1

クライアントがアクセスするインターフェイスを実装する必要があります。これは、マーカー インターフェイスから継承する必要があります。また、クラスを;から継承させたい場合もあります。リモート処理のサポートを構築する方法は他にもありますが、継承は間違いなく何かを実現する最も簡単な方法です。WutServerRemoteWutServerUnicastRemoteObjectUnicastRemoteObject

代わりにこれを試してください (ただし、おそらくリモート インターフェイスを別のファイルに分割し、個別に再配布する必要があります):

public class WutServer extends UnicastRemoteObject implements WutServer.Wut {
    interface Wut extends Remote {
        String wut() throws RemoteException;
    }
    // Because of the exception...
    public WutServer() throws RemoteException {}
    public String wut() { return "wut"; }
    public static void main(String[] args) throws RemoteException {
        LocateRegistry.createRegistry(1099).rebind("WutManager",new WutServer());
        System.out.println("Ready...");
    }
}
于 2011-03-02T09:41:17.500 に答える
-1

オブジェクトを作成し、main 関数の最後でオブジェクトの wait を呼び出します。あれは;

public static void main(String[] args) throws RemoteException {
    Registry registry = LocateRegistry.createRegistry(1099);

    //your object to wait
    Object lockObject=new Object();

    try {            
              registry.bind("WutManager", new WutManager());            
              System.out.println("Ready..");

              //here makes your rmi server non-stop
              synchronized(lockObject){
                    lockObject.wait();
              }
     }catch (Exception e) {            
              e.printStackTrace();          
     } 
}
于 2011-10-17T16:52:29.397 に答える