2013-03-23 3 views
2

JavaFX는 텍스트를 텍스트 필드로 설정하는 동안 NullPointerexception을 생성합니다.javafx-8에서 NullPointerException을 수정하는 방법

public void invalidate() { 
    model.getLock().lock(); 
    try { 
     memoryDisplayTextField.setText(model.getMemory() != 0 ? "M" : ""); 
     mainDisplayTextField.setText(model.getDisplayText()); 
    } finally { 
     model.getLock().unlock(); 
    } 
} 

스택 트레이스는 다음과 같습니다 : 어떤 해결 방법은

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) 

있습니까 이 코드는이 예외를 생성? 아니면 출시까지 기다려야합니까?

감사합니다.

+0

JavaFX 응용 프로그램 스레드에서'invalidate' 메소드가 호출 되었습니까? – jewelsea

답변

5

제가 알다시피, 문제는 에 의해 랩핑하여이 문제를 해결합니다.이 문제는 JavaFX 응용 프로그램 스레드에서 setText 메서드를 호출하여 발생합니다.

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합니다.

관련 문제