在我们的Java applet中,为什么重复调用init()?

时间:2012-02-24 19:05:54

标签: java applet initialization

我正在研究用Java编写的游戏代码,它既作为应用程序又作为applet运行。当我们从浏览器中将游戏作为applet运行时,我们发现在某些情况下,init()会在游戏过程中被反复调用 - 两次或三次或四次。我们已经添加了一些调试代码,似乎清楚地证明了这种情况--inside init()我们每次调用init()时都会增加一个变量。这是我的印象,这应该永远不会发生,但它似乎是,而且显然不限于一个操作系统。我忽略了一些明显的东西吗如果没有,你对这怎么可能有任何想法?

我正在使用Swing和MigLayout,并使用Eclipse编辑代码。

更多信息: 我无权发布任何重要的代码段。但是为了给出更多的上下文,init()由applet的主类调用。 init()代码是这样的:

    Container cpane; 
    boolean inAnApplet = true;
    public void init(Container c)
     {
      cPane = c;
      init();
     }
    public void init()
     {
      if (inAnApplet)
       cPane = getContentPane();
      // more code goes here, 
      // and then
      if (inAnApplet)
       initConnection();
    }

假设主类名为BigGuy,那么主类代码的结构是,如果软件作为网页中的applet运行,它当然会运行init()。

如果该软件是作为应用程序运行的,那么BigGuy.main()就是这样的:

inAnApplet = false;
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
BigGuy theApp = new BigGuy();
frame.addWindowListener(theApp);
theApp.init(frame.getContentPane());
frame.pack();
frame.setVisible(true);
theApp.input.requestFocusInWindow();
theApp.initConnection();

0 个答案:

没有答案