0

NullPointerException に直面していますが、それがどこで、なぜ発生するのかわかりません。プロジェクトに JavaFX を使用していますが、多くのコンポーネント (主に SVGPath、Circle オブジェクト、Text オブジェクト) を含む .fxml ファイルが含まれています。これらは Controller クラスにインポートされます。各 SVGPath にはマウス リスナー (クリック、入力、および終了アクション用) があり、解決に何時間も費やしたため、NullPointerException が発生することがあります。例外の正確なスタック トレースを次に示します。

java.lang.NullPointerException
at com.sun.javafx.sg.prism.NGTextHelper.computeBoundsLogical(Unknown Source)
at com.sun.javafx.sg.prism.NGTextHelper.computeContentBounds(Unknown Source)
at javafx.scene.text.Text.impl_computeGeomBounds(Unknown Source)
at javafx.scene.Node.updateGeomBounds(Unknown Source)
at javafx.scene.Node.getGeomBounds(Unknown Source)
at javafx.scene.Node.getLocalBounds(Unknown Source)
at javafx.scene.Node$MiscProperties$2.computeBounds(Unknown Source)
at javafx.scene.Node$LazyBoundsProperty.get(Unknown Source)
at javafx.scene.Node$LazyBoundsProperty.get(Unknown Source)
at javafx.scene.Node.getBoundsInLocal(Unknown Source)
at com.sun.javafx.scene.control.skin.TextAreaSkin$ContentView.layoutChildren(Unknown Source)
at javafx.scene.Parent.layout(Unknown Source)
at javafx.scene.Parent.layout(Unknown Source)
at javafx.scene.Parent.layout(Unknown Source)
at javafx.scene.Scene.layoutDirtyRoots(Unknown Source)
at javafx.scene.Scene.doLayoutPass(Unknown Source)
at javafx.scene.Scene.access$3900(Unknown Source)
at javafx.scene.Scene$ScenePulseListener.pulse(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$9.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:722)

誰かがこの発生の理由を説明して助けてくれれば、とても感謝しています。

4

1 に答える 1

1

おそらくあなたはすでにこれを解決していますが、私の解決策が他の人に役立つかもしれません。

Swing アプリケーションで JavaFX を使用している場合は、対応するスレッドでのみ JavaFX コードを実行し、EDT でのみ Swing コードを実行するように注意する必要があります。

アプリケーションで同様の問題が発生していましたが、これは EDT での JavaFX コードの実行が原因でした。したがって、これを修正するために、コードを見直して、EDT から呼び出される可能性のあるメソッドで Platform.runLater(...) を使用するようにしました。

Platform.runLater(new Runnable() {
  @Override
  public void run() {
    // JavaFX manipulation code.
  }
}

これは簡単に思えますが、覚えるのが難しい場合があります。したがって、JavaFX コードを見直して、Swing コンポーネントおよびイベントによって呼び出すことができる public メソッドおよびインターフェースを検索してください。

于 2016-12-01T20:53:42.607 に答える