1

2つの異なるメソッド間で共有されている静的変数にアクセスしようとすると、この問題が発生します...

環境が次のようになると仮定します。

RMIインターフェースCommonUtilsを使用した方法1:

CommonUtils service = registry.lookup("chat"); //i'm sure that it works fine
service.register(String username);...

CommonUtilsの実装:

public static ArrayList<ChatInterface> connectedChat=new ArrayList<ChatInterface>();
public static void register(String username){
     connectedChat.add(username);
}
public static String getChatByUsername(String username){
    for(ConnetctedChat temp:connectedChat)
       if (temp.getUsername().equals(username))
           return temp;
} ...

方法2は、同じライブラリからutilsを直接呼び出します。

String username;
ChatInterface tmp=CommonUtils.getChatByUsername(username); <---- This is "the problem"

ここで、「ArrayList connectedChat」内にあるものを調べようとすると、2つの異なる結果が表示されます。正しい結果は、最初のメソッドから情報を取得したときです。そうしないと、「メソッド2」から何かを取り出そうとすると、ArrayListが空であると表示されるため、操作できなくなります(ただし、他のメソッドからは、リストが空ではないようです!)。

私が解決しようとしているのは一種のチャットサービスです...それはクライアント送信者-サーバー-クライアント受信者から機能しますが、単にサーバー送信者-クライアント受信者通信では機能しないようです。

4

1 に答える 1

1

静的変数がRMIによってJVM間で共有されることを期待しているようです。そうではありません。そのため、リモートメソッドが存在します。

于 2012-09-26T02:03:34.740 に答える