我正在研究用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();