2016-11-17 4 views
0

Ich versuche, ein Adressbuch mit JavaFX zu erstellen. Bisher habe ich das Hauptfenster erstellt, ich habe die ObeservableList erstellt, die alle meine Personendaten enthält, und eine Methode, um diese Liste zurückzugeben, da sie privat ist. Ich habe alle Kontakte in der Liste korrekt mit mit ihren Informationen in der primärenStage angezeigt. Wenn ich auf "neu" klicke, um einen neuen Kontakt hinzuzufügen, und ich fülle ihre Informationen in einem zweiten Fenster aus, dann klicke auf die Schaltfläche "Bestätigen/OK" Ich erhalte einige Fehler.Java.lang.NullPointerException Fehler mit Adressbuch

Hier ist meine Hauptklasse: (Ich entschuldige mich so viel Code für die Buchung)

import javafx.application.Application; 
    import javafx.collections.FXCollections; 
    import javafx.collections.ObservableList; 
    import javafx.fxml.FXMLLoader; 
    import javafx.stage.Stage; 
    import javafx.scene.Scene; 
    import javafx.scene.layout.AnchorPane; 
    import javafx.scene.layout.BorderPane; 
    public class Main extends Application { 

    private Stage primaryStage; 

    @Override 
    public void start(Stage primaryStage) { 
    this.primaryStage = primaryStage; 
    mainWindow(); 
    } 

    public void mainWindow() { 
    try { 

    FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindowView.fxml")); 
    AnchorPane pane = loader.load(); 
    Scene scene = new Scene(pane); 

    MainWindowController controller = loader.getController(); 
    controller.setMain(this); 

    primaryStage.setScene(scene); 
    primaryStage.setResizable(false); 
    primaryStage.show(); 

    } catch(Exception e) { 
    e.printStackTrace(); 
    } 
    } 

    public void newPersonWindow() { 
    try { 

    FXMLLoader loader = new FXMLLoader(Main.class.getResource("NewPersonView.fxml")); 
    AnchorPane pane = loader.load(); 
    Scene scene = new Scene(pane); 

    Stage stage = new Stage(); 

    NewPersonController controller = loader.getController(); 
    controller.setMain(this, stage); 

    stage.setScene(scene); 
    stage.setResizable(false); 
    stage.show(); 

    } catch(Exception e) { 
    e.printStackTrace(); 
    } 
    } 

    private ObservableList<Person> personData = FXCollections.observableArrayList(); // plain list that contains all of our data *note it's private so we must create a method to call it 
    public ObservableList<Person> getPersonData() { // method that returns the private personData list 
    return personData; 
    } 

    public Main() { // create the constructor of the main class 

    //adds person 
    personData.add(new Person("Carson", "Clark", "250-415-6675", "Vancouver", "g8y-4d2", "[email protected]")); // a new instance from the person model 
    personData.add(new Person("John", "Smith", "543-476-4188", "Victoria", "x8g-4a2", "[email protected]")); 
    personData.add(new Person("Eric", "Ranch", "762-562-5477", "New York", "k8b4s4", "[email protected]")); 
    personData.add(new Person("Sam", "Smith", "425-475-6512", "Washington", "b8y-9d2", "[email protected]")); 
    personData.add(new Person("Jake", "Carter", "462-888-1705", "Nanimo", "h8x-4c8", "[email protected]")); 


    } 

    public static void main(String[] args) { 
    launch(args); 
    } 
    } 

Hier meine NewPersonController Klasse:

package application; 
import javafx.fxml.FXML; 
import javafx.scene.control.TextField; 
import javafx.stage.Stage; 
public class NewPersonController { 

@FXML private TextField firstNameField, lastNameField, phoneField, cityField, postalField, emailField; 

private Stage stage; 
private Main main; 

public void setMain(Main main, Stage stage) { 
this.main = main; 
this.stage = stage; 
} 

@FXML 
public void handleConfirm() { // I think this is where the error is occuring but I'm not sure why 
Person person = new Person(
firstNameField.getText(), 
lastNameField.getText(), 
phoneField.getText(), 
cityField.getText(), 
postalField.getText(), 
emailField.getText() 
); 
main.getPersonData().add(person); 
stage.close(); 
} 

@FXML 
public void handelCancel() { 
stage.close(); 
} 
} 

Und schließlich ist hier die Konsole ausgegeben, nachdem die Bestätigung der Auswahl Schaltfläche im neuen Kontaktfenster:

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.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.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.Node.fireEvent(Node.java:8411) 
at javafx.scene.control.Button.fire(Button.java:185) 
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
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.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(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) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771) 
... 48 more 
Caused by: java.lang.NullPointerException 
at application.NewPersonController.handleConfirm(NewPersonController.java:27) 
... 58 more 

Danke an alle, die diesen Beitrag lesen, Ich weiß, dass es viel ist, aber ich arbeite jetzt seit über 2 Tagen daran und ich habe nichts erreicht. Irgendwelche Ideen werden sehr geschätzt, nochmals danke.

+0

Welche Zeile wirft die Ausnahme auf? –

+0

Mögliches Duplikat von [Was ist eine NullPointerException, und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – fabian

+0

main.getPersonData(). Add (person); Dies sollte Zeile 27 sein. verursacht durch: java.lang.NullPointerException bei application.NewPersonController.handleConfirm (NewPersonController.java:27). Welche Art von Knoten sollte hauptsächlich sein? – Sedrick

Antwort

0

Das ist dein Problem. Was versuchst du hier zu machen?

main.getPersonData().add(person); 

Ihre Programmierstruktur ist verwirrend. Anstatt einen neuen Controller zu erstellen und anzuzeigen, um neue Benutzer hinzuzufügen. Ich würde einen Javafx-Dialog verwenden, der sich öffnet, wenn eine Schaltfläche (btnAddNewUser) gedrückt wird.

+0

Okay danke, ich werde es umstrukturieren. –

Verwandte Themen