2015-12-10 1 views
0

Я хотел добавить ярлыки в свою сетку через java; Поэтому, я использовал следующий код:Редактирование JavaFX Gridpane из файла FXML

public class Controller { 
@FXML 

private Button addTeam; 
private GridPane teams; 

public void addTeam(ActionEvent e) throws Exception { 
     if(e.getSource()==addTeam) { 
      Label apple = new Label("hello"); 
      teams.setConstraints(apple, 0, 0); 
      teams.getChildren().add(apple); 
     } 
} 

Когда я запускал код, я получаю NullPointerException обернутое в InvocationTargetException.

Что именно здесь null? Из моего нынешнего понимания тег @FXML создает переменные, которые я описал ниже.

Stack:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java 
.lang.reflect.InvocationTargetException 
     at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source) 
     at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown So 
urce) 
     at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unkn 
own Source) 
     at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknow 
n Source) 
     at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknow 
n Source) 
     at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(U 
nknown Source) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
     at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
     at javafx.event.Event.fireEvent(Unknown Source) 
     at javafx.scene.Node.fireEvent(Unknown Source) 
     at javafx.scene.control.Button.fire(Unknown Source) 
     at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Un 
known Source) 
     at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown S 
ource) 
     at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(Unknown S 
ource) 
     at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.h 
andleBubblingEvent(Unknown Source) 
     at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unkn 
own Source) 
     at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknow 
n Source) 
     at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknow 
n Source) 
     at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(U 
nknown Source) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Sourc 
e) 
     at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Sou 
rce) 
     at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
     at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
     at javafx.event.Event.fireEvent(Unknown Source) 
     at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
     at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source) 
     at javafx.scene.Scene.impl_processMouseEvent(Unknown Source) 
     at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) 
     at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotificatio 
n.run(Unknown Source) 
     at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotificatio 
n.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEve 
nt$355(Unknown Source) 
     at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown 
Source) 
     at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unkn 
own Source) 
     at com.sun.glass.ui.View.handleMouseEvent(Unknown Source) 
     at com.sun.glass.ui.View.notifyMouse(Unknown Source) 
     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
     at com.sun.glass.ui.win.WinApplication.lambda$null$149(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
     at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
     ... 61 more 
Caused by: java.lang.NullPointerException 
     at GuiController.addTeam(GuiController.java:42) 
     ... 70 more 
+1

Тег '@ FXML' инициализирует переменные экземплярами, создаваемыми« FXMLLoader », когда он читает файл FXML. Поэтому вам действительно нужно будет точно показать ваш файл FXML. И это действительно помогло бы, если бы вы могли указать, какая строка в указанном вами кодеке является строкой 42. Сказав все это ... поскольку у вас нет аннотации '@ FXML' в переменной' teams', только на переменная 'addTeam', представляется весьма вероятной, что' команды' являются «нулями» (и эта строка 42 является первой строкой, относящейся к «командам»: 'teams.setConstraints (...)'). –

+0

К сожалению, я думал, что тег FXML нужно будет использовать только один раз, но, как вы сказали, мне нужно аннотировать каждую переменную тегом FXML. Спасибо за вашу помощь! – Rhendz

+1

Аннотации - это просто часть утверждения. Обратите внимание, что между '@ FXML' и последующим кодом нет точки с запятой, поэтому весь оператор является' @FXML private Button addTeam; '. Следующий код формирует следующий оператор: 'private GridPane teams;' (технически аннотации являются модификаторами: '@ FXML' имеет такой же статус в объявлении, что и ключевое слово' private'.) –

ответ

0

Убедитесь, что каждая переменная вы ссылаетесь из файла FXML имеет @FXML аннотацию в вашем коде. Тег @FXML устраняет необходимость в создании экземпляров ваших переменных и, по существу, ищет переменную с помощью fx: id.