2016-07-28 22 views
0

vielleicht bin ich nur zu schlecht, es zu finden, aber ich habe nicht, so dass ich nur hier fragen: D Ich mache eine Benutzeroberfläche mit JavaFX mit dem SceneBuilder. . Ich mag den Wert eines TextField- outsite der Controller-Klasse ändern, einen „voreingestellten Wert hat Auf dem Versuch eine Methode in der Controller-Klasse zu rufen, bekam eine Ausnahme: Den Versuch:Holen Sie sich UI-Elemente von außerhalb der Controller-Klasse

Mainclass :

public void openCreateProject() { 

    Parent root = null; 
    try { 
     root = FXMLLoader.load(getClass().getResource("createprojectgui/CreateProjectGui.fxml")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    createNewProjectWindow = new Stage(); 
    createNewProjectWindow.setTitle("Create new Project"); 
    createNewProjectWindow.setScene(new Scene(root, 560, 280)); 
    createNewProjectWindow.setResizable(false); 
    createNewProjectWindow.show(); 

    CreateProjectGuiController createProjectGuiController = new CreateProjectGuiController(); 
    createProjectGuiController.setDefaultValues(); 
} 

Controller-Klasse Methode:

public void setDefaultValues() { 
    savePathTxTField.setText(Config.getProjectsPath()); 

} 

Execption:

"Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.control.MenuItem.fire(MenuItem.java:462) 
    at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) 
    at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771) 
    ... 43 more 
Caused by: java.lang.NullPointerException 
    at guis.createprojectgui.CreateProjectGuiController.setDefaultValues(CreateProjectGuiController.java:78) 
    at guis.SceneManager.openCreateProject(SceneManager.java:117) 
    at guis.idegui.IdeGuiController.newProject(IdeGuiController.java:29) 
    ... 53 more" 

Kann mir jemand helfen?

+2

Es liegt in der Verantwortung des Controllers, den Status der von ihm gesteuerten Benutzeroberfläche beizubehalten. Sie sollten nicht von außerhalb des Controllers auf die UI-Elemente zugreifen. Posten Sie etwas Code und erklären Sie, was Sie tun möchten. Erklären Sie auch, was schief läuft: "Es hat nicht funktioniert" ist keine Problemaussage. –

+0

Auch das Wort "Cast" ist nicht das, was du meinst. (Ich bin mir nicht sicher, was du meinst, aber das ist es nicht.) Kannst du das reparieren? –

+0

Hat die Änderungen gemacht, D – Liz3

Antwort

1

Sie erstellen eine neue Controller-Instanz, anstatt auf die FXMLLoader-Instanz zuzugreifen. Offensichtlich werden die von FXMLLoader injizierten Felder in der von Ihnen erstellten Instanz nicht initialisiert.

Greifen Sie einfach auf die Steuerung von FXMLLoader.