В настоящее время я создаю редактор уровней JavaFX в сочетании с библиотекой LWJGL для реализации возможностей OpenGL и, таким образом, используя многопоточность.
Моя проблема, однако, в том, что иногда, когда я запускаю события JavaFX (когда я нажимаю кнопку/клавишу и т.д.), я получаю этот спонтанный java.lang.NullPointerException
. Я не могу понять, как именно происходит ошибка, и по какой-то странной причине stacktrace не предоставит мне, где произошло исключение. Все, что я знаю, это то, что это происходит, когда я каким-то образом взаимодействую с JavaFX Application Thread.
Однако, когда это происходит, он не только печатает его на консоли один раз, а затем падает. Случается, что приложение непрерывно выводит сообщение об ошибке снова и снова, пока я не закрою приложение. Похоже, я больше не могу запускать некоторые определенные события, когда произошла ошибка.
Это спонтанное повторяющееся сообщение об ошибке, которое я получаю:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Unknown Source)
at javafx.scene.Scene$ScenePulseListener.pulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Unknown Source)
at com.sun.javafx.tk.Toolkit$$Lambda$153/452428720.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Unknown Source)
at com.sun.javafx.tk.Toolkit.firePulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$42/424424770.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/12064136.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Я предполагаю, что это имеет какое-то отношение к "синхронизирующим узлам". Поскольку я работаю с многопотоковой обработкой для запуска цикла рендеринга с OpenGL, это может иметь какое-то отношение к делу. Я также использую выражение Lambda Expression из Java8, и, по-видимому, как он говорит в журнале ошибок, это тоже имеет отношение к ним.
Я не ожидаю, что кто-то даст мне точный ответ на мою проблему, и то, что я сделал неправильно, поскольку я не предоставляю никакого кода (потому что мой проект слишком велик, и я не знаю, где Исключение имеет место). Однако у меня есть несколько общих вопросов:
-
Что означает этот журнал ошибок?
-
Что может быть причиной этого?
-
Почему это не дает мне никакой информации о том, где произошло исключение?
Мне удалось получить номера строк из stacktrace, переключив JRE в Eclipse с установки JRE на банку, предоставленную JDK. Это позволило мне получить номера строк из скомпилированных API, например, в самом JavaFX.
Это новый журнал ошибок:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneNodes(Scene.java:2289)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2419)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:314)
at com.sun.javafx.tk.Toolkit$$Lambda$153/478814140.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:525)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(QuantumToolkit.java:334)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$42/1940618951.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/640174177.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Моя ошибка лежит в классах JavaFX и, вероятно, где-то внутри моего выражения лямбда, так как единственное место, где он все еще говорит (Неизвестный источник), там, где он также говорит "лямбда". Может быть, stacktrace не может отображать номера строк в lambdas?
В любом случае, это строка кода, которая возвращает исключение NullPointerException:
if (node.getScene() == Scene.this)
Это в классе класса JavaFX