в нашем Java-апплете, почему init () вызывается повторно? - PullRequest
1 голос
/ 24 февраля 2012

Я работаю над кодом для игры, написанной на 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...