кроме правила не смешивания, я предполагаю, что вы получите аналогичное исключение в чистом контексте awt - из учебника LWJGL Basic Basic :
Теперь, когда мыу нас есть базовый шаблон, который нам нужен, чтобы прикрепить к нему собственный дисплей LWJGL.Для этого мы просто используем метод Display.setParent (Canvas).Однако прежде чем мы сможем создать дисплей, мы должны убедиться, что холст готов для рисования.Чтобы убедиться в этом, мы будем использовать метод addNotify () холста awt, чтобы сообщить нам, когда холст готов и что мы можем создать Display.Точно так же мы будем использовать removeNotify (), чтобы сообщить нам, что холст собирается быть уничтоженным, и мы должны очистить и закрыть собственный дисплей.
Редактировать
(все еще нет IDE под рукой, только с макушки головы; -)
На самом деле, я не совсем понимаю, что вы делаете со всем этим removeXX, не ожидал бы, что это понадобится.Сначала я хотел бы сделать это простым и точным, как показано в руководстве:
display_parent = new Canvas() {
public final void addNotify() {
super.addNotify();
startLWJGL();
}
public final void removeNotify() {
stopLWJGL();
super.removeNotify();
}
};
frame.add(display.parent);
Кроме того, убедитесь, что все изменения происходят в EDT - что может быть реальной проблемой, не знаю, что на самом деле делает Displayв этих методах:
public void gameLoop() {
while(running) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Display.sync(60);
Display.update();
}
});
}
Display.destroy();
}
Edit 2
просто запустите пример (в приведенном выше учебнике) в JFrame, без изменений в существующем коде, простодобавлен основной:
public static void main(String[] args) {
final JFrame frame = new JFrame("Gears AWT");
final JPanel intro = new JPanel();
Action action = new AbstractAction("Start Gears") {
@Override
public void actionPerformed(ActionEvent e) {
GearsApplet gears = new GearsApplet();
gears.init();
frame.remove(intro);
frame.add(gears);
frame.getRootPane().revalidate();
}
};
JButton button = new JButton(action);
intro.add(button);
frame.add(intro); //.display_parent);
frame.setSize(200, 200);
frame.setVisible(true);
}
чувствует себя хорошо (в первом приближении, подозреваю, что некоторые дьяволы прячутся в темных нишах нити - как мы не на EDT (наиболее вероятно)), шестерни работают, и группа вращается