JavaFX NullPointer异常

时间:2013-09-05 17:26:13

标签: nullpointerexception javafx

MainWin.java

Basic.java

enter image description here

当我运行我的应用程序时,我显示错误:

Caused by: java.lang.NullPointerException
    at exmp.ui.UI.nodeEkle(UI.java:48)
    at exmp.ui.Basic.<init>(Basic.java:47)
    at exmp.MainWin.hazirla(MainWin.java:15)
    at exmp.MainWin.<init>(MainWin.java:26)
    at exmp.Start.start(Start.java:13)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    ... 1 more

一切正常,但只有问题nodeEkle方法,当我调试我的应用程序我显示场景为空,但如何?我在方法中创建场景;

public void gerekliUIVerileriniOlustur(){
    group = new Group();

    scene = SceneBuilder.create()
                        .root(group)
                        .fill(Color.BLANCHEDALMOND)
                        .build();

所以我尝试使用Scene to static&gt;公共场景场景;但是没有工作我又得到了另一个错误。所以我怎么能解决这个问题..

1 个答案:

答案 0 :(得分:0)

您永远不会在您提供的代码示例中调用gerekliUIVerileriniOlustur()方法。

gerekliUIVerileriniOlustur()是在UI类中设置对场景的引用的方法。

因为未调用该方法,所以当您尝试在nodeEkle()方法中引用场景时,最终会出现NullPointerException。

处理此问题的一种方法是在nodeEkle() =&gt;

中进行延迟调用
public final void nodeEkle(Node... node) {
  if (scene == null) {
     gerekliUIVerileriniOlustur();
  }

  ((Group)scene().getRoot()).getChildren().addAll(node);
}

可能有更好的方法来处理它,例如将一个构造函数添加到执行gerekliUIVerileriniOlustur()中的任务的UI类中,并确保从所有UI子类调用UI构造函数,但这取决于您的应用程序以及您希望实现的目标。

在任何情况下,您可能希望确保在尝试对UI组件执行任何操作之前,对给定的UI实例仅调用一次gerekliUIVerileriniOlustur()