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.
Welche Zeile wirft die Ausnahme auf? –
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
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