0

私はアプレット サブクラス (ゲーム クライアント) を持っています。そのすべてのインスタンスは、別の非アプレット クラス (吹き替えAuxillary) の単一のインスタンスへの参照を持っている必要があります。
これは属性を静的に宣言するだけの場合だと思っていましたが、すべてのアプレット インスタンスのコンストラクターで、Auxillaryそのアプレット インスタンスに対して新しいインスタンスが作成されるようです (この例では、Auxiliary のスペルが間違っていることは承知しています.. .)

簡単な例を次に示します。

クライアント

public class Applet extends JApplet {

    // don't yet know Auxillary constructor args
    public static Auxillary global;

    public Applet() {

        // now I know args
        if (global == null)
            global = new Auxillary("arbitrary", "arguments");

        // test global
        global.counter ++;
        System.out.println(global.counter);

    }

Auxillary コンストラクターへの引数が、すべてのアプレット インスタンスで同じである/同じであることを保証することに注意してください。

補助

public class Auxillary {

    public int counter;

    public Auxillary (Object a, Object b) {
        counter = 0;
    }
}

新しい Applet インスタンスを作成するたびに、表示される数が増えることを期待しています。代わりに、常に 1 です。
何が間違っていますか?

この SO の質問は、アプレット インスタンスが何らかの方法で属性インスタンスを共有できることを確信させます。
この Java Docは static キーワードを使用して降格しますが、私はこれを「異なるアプレット サブクラスの異なるインスタンス」として解釈します (そして、私のアプレット インスタンスは同じページに表示されません)。

そう; どうすれば達成できますか?
ありがとう

4

1 に答える 1

0

同じ JVM 内のアプレット インスタンスのみが静的属性を共有できます (他のインスタンスは完全に別のプログラムです...)。
そのため、ブラウザー (Chrome など) の複数のタブは JVM を共有し、これらのタブのすべてのアプレット インスタンスは静的属性を共有しますが、異なるブラウザーやマシン間では共有しません。

于 2013-05-29T05:30:09.543 に答える