首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javafx-8中修复NullPointerException

如何在javafx-8中修复NullPointerException
EN

Stack Overflow用户
提问于 2013-03-24 00:56:07
回答 1查看 9.3K关注 0票数 2

JavaFX在将文本设置为文本字段时会生成NullPointerexception。这段代码产生了这个异常:

代码语言:javascript
复制
public void invalidate() {
    model.getLock().lock();
    try {
        memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : "");
        mainDisplayTextField.setText(model.getDisplayText());
    } finally {
        model.getLock().unlock();
    }
}

Stacktrace如下:

代码语言:javascript
复制
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)

有什么变通方法吗?或者我应该等到发布的时候?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-24 09:16:44

据我所知,这个问题是由在JavaFX应用程序线程外调用setText方法引起的,所以用Platform.runLater()包装它可以解决这个问题。

代码语言:javascript
复制
 public void invalidate() {
    Platform.runLater(() -> {
        model.getLock().lock();
        try {
            memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : "");
            mainDisplayTextField.setText(model.getDisplayText());
        } finally {
            model.getLock().unlock();
        }
    });
}

PS感谢珠海的帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15589459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档