所有Applet类实例都不共享静态属性?

时间:2013-05-29 04:17:35

标签: java swing static applet

我有一个Applet子类(游戏客户端),其中所有实例都必须引用另一个非applet类的单个实例(称为Auxillary)。
我认为这只是一个声明属性为静态的情况,但似乎在每个applet实例的构造函数中,为该Applet实例创建了一个新的Auxillary实例(我知道我是拼错的辅助所有通过这个例子......)

这是一个简单的例子;

客户端

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构造函数的参数对于每个Applet实例都是相同的。

Auxillary

public class Auxillary {

    public int counter;

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

每次我创建一个新的Applet实例时,我都希望看到越来越多的打印;相反,它一直是1.
我究竟做错了什么?

This SO question说服我,我的Applet实例可以某种方式共享一个属性实例 This Java Doc使用static关键字降级,但我将其解释为“不同Applet子类的不同实例”(并且我的Applet实例不会显示在同一页面上)

因此;我该怎样才能实现呢? 感谢

1 个答案:

答案 0 :(得分:0)

只有同一JVM中的Applet实例才能共享静态属性(其他实例完全是独立的程序......) 因此,浏览器中的多个标签(如Chrome)将共享JVM,这些标签中的所有Applet实例将共享静态属性,但不会在不同的浏览器或计算机上共享。