如何修复javafx-8中的NullPointerException
JavaFX在将文本设置为文本字段时生成如何修复javafx-8中的NullPointerException,javafx,java-8,Javafx,Java 8,JavaFX在将文本设置为文本字段时生成NullPointerexception。 此代码产生以下异常: public void invalidate() { model.getLock().lock(); try { memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : ""); mainDisplayTextField.setText(model.getDisplayText
NullPointerexception
。
此代码产生以下异常:
public void invalidate() {
model.getLock().lock();
try {
memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : "");
mainDisplayTextField.setText(model.getDisplayText());
} finally {
model.getLock().unlock();
}
}
Stacktrace如下所示:
java.lang.NullPointerException
at com.sun.javafx.text.TextLayout.layout(TextLayout.java:1365)
at com.sun.javafx.text.TextLayout.ensureLayout(TextLayout.java:174)
at com.sun.javafx.text.TextLayout.getBounds(TextLayout.java:197)
at javafx.scene.text.Text.getLogicalBounds(Text.java:387)
at javafx.scene.text.Text.impl_computeGeomBounds(Text.java:1182)
at javafx.scene.Node.updateGeomBounds(Node.java:3322)
at javafx.scene.Node.getGeomBounds(Node.java:3275)
at javafx.scene.Node.getLocalBounds(Node.java:3257)
at javafx.scene.Node.updateTxBounds(Node.java:3335)
at javafx.scene.Node.getTransformedBounds(Node.java:3175)
at javafx.scene.Node.updateBounds(Node.java:504)
at javafx.scene.Parent.updateBounds(Parent.java:1643)
at javafx.scene.Parent.updateBounds(Parent.java:1643)
at javafx.scene.Parent.updateBounds(Parent.java:1643)
at javafx.scene.Parent.updateBounds(Parent.java:1643)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2268)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:352)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:511)
at com.sun.javafx.tk.quantum.QuantumToolkit$12.run(QuantumToolkit.java:379)
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.access$300(Unknown Source)
at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:722)
有什么解决办法吗?或者我应该等到释放
谢谢。据我所知,问题是由从JavaFX应用程序线程调用
setText
方法引起的,所以
通过Platform.runLater()将其包装可以解决此问题
public void invalidate() {
Platform.runLater(() -> {
model.getLock().lock();
try {
memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : "");
mainDisplayTextField.setText(model.getDisplayText());
} finally {
model.getLock().unlock();
}
});
}
PS感谢jewelsea的帮助。您的invalidate
方法是否在JavaFX应用程序线程上调用?