私はジレンマがあるようです。私のプロジェクトの複雑な詳細を控えて、私は次のことをしようとしています。 (簡略化のため除くと輸入のようないくつかのコードを交換してみてください-キャッチ)Java RMIのレジストリオブジェクトとインタフェースオブジェクトを静的にグローバルに宣言できますか?
1 public class Client
2 {
3 private Registry reg1;
4 private GameSessionInterface sesh1;
5
6 public static void main(String[] args)
7 {
8 reg1 = LocateRegistry.getRegistry(serverIP, 4200);
9 sesh1 = (GameSessionInterface)reg1.lookup("Session1");
10 }
11 }
線8に
と9私はエラーが「非静的フィールドREG1をstatic参照できません」を取得しますおよび"非静的フィールドsesh1への静的参照を作成できません"
mainの中でreg1とsesh1を宣言しても、この問題は発生しません。しかし、私は非常に最小限のsesh1でグローバルにする必要があるので、メソッドをmainの外でアクセスできるようにすることができます。
私は100%RMI変数がJVMでどのように機能するのかわからないので、静的変数として宣言するのが安全かどうかは分かりません。 Logicは、私がのクライアントの複数のインスタンスを同じJVMに作成する予定ではないので、これに従います。これは問題ではありませんが、これはリモートオブジェクトへの参照であると考えています見えない副作用があります。私はしばらく検索しましたが、誰もこれに対処していないようです。しかし同時に、静的宣言されたコードの例を見つけることができないように見えます。静的宣言を使用して他の場所に同様のコードが存在するようにコンパイルすることはできません。
私は本当にRMIをJavaで新しくしていますので、より多くのRMI体験をお持ちの方なら、これがどのように相互作用し、なぜこのエラーが発生するのかを明らかにすることができれば幸いです。
ありがとうございます!