2013-08-25 73 views
0

我正面臨一個NullPointerException,我無法弄清楚它出現的位置或原因。我正在使用JavaFX作爲項目,它包含一個.fxml文件,其中包含大量組件(主要是SVGPaths,Circle對象和Text對象)。它們被導入到Controller類中。每個SVGPath都有一個鼠標監聽器(用於點擊,進入和退出動作),有時候我會得到一個NullPointerException,這讓我發瘋,因爲我花了幾個小時試圖解決它。這是異常的確切堆棧跟蹤。使用JavaFX時出現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) 

如果有人能夠幫助並解釋發生這種情況的原因,我將非常感激。

+0

這具有在JavaFX中成爲bug的所有外觀。我正在尋找一個參考,但沒有訪問到最好的地方看... – rolfl

+0

你不是第一個看到這個:https://forums.oracle.com/thread/2540126 – rolfl

+1

yeap我今天早上看到這篇文章,我也在那裏打開了一個帖子,但是,沒有人回答。也許這是你說的JavaFX的一個bug,但這個問題對我來說變得非常煩人:)。另一方面,謝謝你的迴應。 – quartaela

回答

1

大概你已經解決了這個問題,但也許我的解決方案會幫助別人。

如果您正在使用Swing應用程序中的JavaFX,則必須小心只在對應線程中執行JavaFX代碼並僅在EDT中運行Swing代碼。

我在應用程序中遇到了類似的問題,這是由於在EDT中執行了JavaFX代碼。因此,爲了糾正這個問題,我回顧了代碼,以確保在EDT上可能調用的方法上使用Platform.runLater(...)。

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

這看起來很容易,但有時候可能會有點棘手。因此,請確定,查看您的JavaFX代碼,以查找可由Swing組件和事件調用的公共方法和接口。

相關問題