2

Java RMI アプリケーションがあります。問題は、RMI メソッドを呼び出してからコードを終了するときです。応募は終了しません。

コマンド ラインでは、「Bye」メッセージが表示されますが、プロンプト ラインは表示されません。

public static void main(String args[]) throws Exception {
    ...
    System.setSecurityManager(new RMISecurityManager());
    s = (Registry) Naming.lookup("rmi://localhost/Registry");
    ChatClientImpl c = new ChatClientImpl(name);
    c.act(s);
    System.out.println("Bye"); <-- "Bye" message is shown
}

アプリケーションを停止するには ^C を実行する必要があります。

act() メソッドは、use の入力を解析して他のメソッドを呼び出します。ただし、他のメソッドを呼び出さずに終了しても、Java は終了しません。

何が間違っている可能性がありますか? RMI アプリケーションを終了するには、追加のメソッドを呼び出す必要がありますか?

4

2 に答える 2

5

リモートオブジェクトのように見えますClientImplが、まだエクスポートされているため、JVM はエクスポートを解除するまで終了しませんUnicastRemoteObject.unexportObject()

ClientImplだとしたら、なぜevenリモート オブジェクトなのかわかりません。あなたはそれでリモートで何もしていません。レジストリを除いて、ここではもリモートで行っていません。私はあなたが前後に何かを持っていると思います。検索したリモート オブジェクトでリモート メソッドを呼び出す必要がありますs

于 2013-11-04T01:17:36.603 に答える
0

これは、オブジェクトsでリモート メソッドを呼び出さないことが原因です。そうすると、リモート オブジェクトは自動的にアンエクスポートされます。

于 2016-11-29T04:03:04.790 に答える