Я работаю над проектом, в котором используется инструмент NASA WorldWind . Этот инструмент использует OpenGL для отображения 3D-изображения Земли. Этот 3D-шар используется для отображения некоторых данных. В настоящее время я добавляю окно настроек, чтобы пользователь мог контролировать отображаемое изображение, поэтому каждый раз, когда пользователь заходит в настройки, мне приходится обновлять sh вид. Вот как я это делаю:
// Stop the Animator while we setup the world
this.animator.pause();
SceneController sc = world.getSceneController();
if (world.getModel() != null) {
// Dispose the existing layers to replace them with new ones
}
// Clear input handlers
world.getInputHandler().clearList();
world.clearList();
// Set the Lighting model.
sc.getDrawContext().setStandardLightingModel(new ArdorLightingModel());
// Create Standard model
final Model model = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
world.setModel(model);
// Create Round/Flat Globe
roundGlobe = model.getGlobe();
flatActive = false;
flatGlobe = new EarthFlat();
ZeroElevationModel elevationModel = new ZeroElevationModel();
roundGlobe.setElevationModel(elevationModel);
flatGlobe.setElevationModel(elevationModel);
// ...
// More code to add a menu on top of Worlwind, etc.
// ...
//Restart the animator
this.animator.resume();
Я использую тот же метод, чтобы создать мир, когда приложение запускается и проблем нет. Но когда я использую его для обновления sh вида, я получаю следующее исключение:
finishLifecycleAction(com.jogamp.opengl.util.Animator$3): ++++++ timeout reached ++++++ main
finishLifecycleAction(com.jogamp.opengl.util.Animator$3): OK false- pollPeriod 1000, blocking true, waited 1001/1000 - main
- com.jogamp.opengl.util.Animator[started true, animating true, paused true, drawable 1, totals[dt 0, frames 93365, fps 0.0], modeBits 1, init'ed true, animThread Thread[main-AWTAnimator,5,main], exclCtxThread false(null)]
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1336)
at com.jogamp.opengl.util.AnimatorBase.finishLifecycleAction(AnimatorBase.java:552)
at com.jogamp.opengl.util.Animator.pause(Animator.java:292)
...
И самое худшее, что ... это работает! Представление обновляется, как и ожидалось, но консоль все еще показывает эту ошибку. Я попытался Google эту ошибку, но большинство людей, имеющих ее, используют MacOS (у меня Windows 10).
Единственное решение, которое я нашел, состояло в том, чтобы заменить animator.pause()
и animator.resume()
на animator.stop()
и animator.start()
, но я боюсь, что это вызовет у меня некоторые проблемы позже в проекте ...