Я работаю над кодом для игры, написанной на Java, которая работает как приложение и апплет.Когда мы запускаем игру как апплет из браузера, мы видим, что в некоторых случаях init () вызывается повторно во время игры - два, три или четыре раза.Мы добавили некоторый отладочный код, который, кажется, ясно демонстрирует, что это так - внутри init () мы увеличиваем переменную каждый раз, когда вызывается init ().У меня сложилось впечатление, что это НИКОГДА не должно происходить, но, похоже, так оно и есть, и оно явно не ограничено одной ОС.Я пропускаю что-то очевидное?Если нет, есть ли у вас идеи о том, как это может произойти?
Я использую Swing и MigLayout и редактирую код с помощью Eclipse.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: У меня нет разрешения размещать какие-либо существенные части кода.Но чтобы дать немного больше контекста, init () вызывается основным классом апплета.Код 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, тогда структура кода основного класса такова, что если программное обеспечение запускается в виде апплета на веб-странице, он, конечно, запускает 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();