0

MainWin.java

基本的.java

在此处输入图像描述

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

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();

所以我尝试场景到静态>公共静态场景场景;但不工作我得到了另一个错误。所以我该如何解决这个问题..

4

1 回答 1

0

您从不调用gerekliUIVerileriniOlustur()您提供的代码示例中的方法。

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

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

处理此问题的一种方法是在nodeEkle()=>中进行惰性调用

public final void nodeEkle(Node... node) {
  if (scene == null) {
     gerekliUIVerileriniOlustur();
  }

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

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

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

于 2013-09-05T17:52:13.900 回答