2013-09-05 4 views
0

MainWin.javaJavaFX NullPointer Исключение

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

Таким образом, я пробую сцену в статику> публичную статическую сцену сцены; но не работает, я получил еще одну ошибку. Так как я могу решить эту проблему.

+0

Предпочтительный проводной код в виде текста, а не как скриншоты. – jewelsea

ответ

0

Вы никогда не вызываете метод gerekliUIVerileriniOlustur() в примере кода, который вы указали.

gerekliUIVerileriniOlustur() - это метод, который устанавливает ссылку на сцену в классе пользовательского интерфейса.

Поскольку метод не вызывается, когда вы пытаетесь ссылаться на сцену в методе nodeEkle(), вы получаете исключение NullPointerException.

Один из способов справиться с этим делать ленивый вызов в nodeEkle() =>

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

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

Там может быть более эффективных способов справиться с этим, например, добавьте конструктор в класс UI, который выполняет задачи в gerekliUIVerileriniOlustur(), и убедитесь, что конструктор пользовательского интерфейса вызывается из всех подклассов пользовательского интерфейса, но это будет зависеть от вашего приложения и того, чего вы хотите достичь.

В любом случае вы, вероятно, захотите убедиться, что вы вызываете gerekliUIVerileriniOlustur() один раз и только один раз для данного экземпляра пользовательского интерфейса, прежде чем пытаться что-либо сделать с компонентами пользовательского интерфейса.

+0

Я не понимаю, если я не звоню gerekliUIVerileriniOlustur(), где я определяю группу аккордеона сцены. – kibar

+0

Добавил еще одно объяснение моему ответу. – jewelsea

+0

Я понимаю, спасибо, драгоценность теперь работает нормально;) – kibar

Смежные вопросы