title: JavaFX Application: Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
body: <p>I'm working on JavaFX and SQL project. 
  First of all login window opens and if the username and password matches to one stored in my databases then AddCustomer deatils windows will pop up[Works fine till here] . A table would be in my database for the user entry. But as  I click on 'save' button I  get an error like this</p>
  
  <pre><code>   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:394)
      at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
      at java.security.AccessController.doPrivileged(Native Method)
      at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
      at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
      at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
      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$147(WinApplication.java:177)
      at java.lang.Thread.run(Thread.java:748)
  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:1769)
      ... 48 more
  Caused by: java.lang.NullPointerException
      at sample.MysqlConnector.&lt;init&gt;(MysqlConnector.java:22)
      at sample.AddCustomer.addcustomer(AddCustomer.java:52)
      ... 58 more
  </code></pre>
  
  <p>My Main.java</p>
  
  <pre><code>package sample;
  
  import javafx.application.Application;
  import javafx.fxml.*;
  import javafx.scene.Parent;
  import javafx.scene.Scene;
  import javafx.stage.Stage;
  
  public class Main extends Application {
  
      @Override
      public void start(Stage primaryStage) {
          try {
              Parent root = FXMLLoader.load(getClass().getResource("login1.fxml"));
              primaryStage.setTitle("NOVOTEL HOTEL ");
              primaryStage.setScene(new Scene(root, 500, 475));
              primaryStage.show();
          }
          catch(Exception e )
          {
              e.printStackTrace();
          }
      }
  
  
      public static void main(String[] args) {
          launch(args);
      }
  }
  </code></pre>
  
  <p>My MysqlConnector.java</p>
  
  <pre><code>package sample;
  import com.sun.istack.internal.NotNull;
  import com.sun.istack.internal.Nullable;
  import javafx.fxml.FXML;
  
  import java.sql.*;
  
  
  public class MysqlConnector {
      @FXML
      public static Statement stmt;
      @FXML
      public static Connection conn;
  
  
  
  
      public MysqlConnector() {
          Connector();
          String TableName = "CustomerDetails";
          try {
              stmt = conn.createStatement();
              DatabaseMetaData dbm = conn.getMetaData();
              ResultSet tables = dbm.getTables(null, null, TableName.toUpperCase(), null);
              if (tables.next()) {
                  System.out.println("Ready to go");
  
              } else {
                  stmt.execute("CREARE TABLE " + TableName + "("
                          + " customername varchar(45) primary key,"
                          + " customername int" +
                          "+ customernumber int" +
                          "+  customerstay int" +
                          "+  customerguests varchar(45)"
                          + ")");
              }
          } catch (SQLException e1) {
              System.err.println(e1.getMessage());
          }
      }
  
      @Nullable
      @NotNull
      public static Connection Connector() {
  
  
          try {
              Class.forName("com.mysql.jdbc.Driver");
              Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login", "root", "password");
              return conn;
          } catch (Exception e) {
              return null;
          }
  
      }
      @NotNull
      @Nullable
      public  static ResultSet executeQuery(String query) {
  
          ResultSet result ;
  
          try {
               stmt = conn.createStatement();
              result=stmt.executeQuery(query);
  
  
  
          } catch (SQLException e) {
              System.out.println("Error here");
              e.printStackTrace();
              return null;
  
          }
          return result;
      }
      @NotNull
      @Nullable
      public boolean executeAction(String qu) {
          try {
              stmt = conn.createStatement();
              stmt.execute(qu);
              return true;
  
  
          } catch (SQLException e) {
              e.printStackTrace();
              return false;
          }
      }
  }
  </code></pre>
  
  <p>My LoginModel.java </p>
  
  <pre><code>package sample;
  import com.sun.istack.internal.NotNull;
  import com.sun.istack.internal.Nullable;
  import javafx.fxml.FXML;
  
  import java.sql.*;
  
  
  public class MysqlConnector {
      @FXML
      public static Statement stmt;
      @FXML
      public static Connection conn;
  
  
  
  
      public MysqlConnector() {
          String TableName = "CustomerDetails";
          try {
              stmt = conn.createStatement();
              DatabaseMetaData dbm = conn.getMetaData();
              ResultSet tables = dbm.getTables(null, null, TableName.toUpperCase(), null);
              if (tables.next()) {
                  System.out.println("Ready to go");
  
              } else {
                  stmt.execute("CREARE TABLE " + TableName + "("
                          + " customername varchar(45) primary key,"
                          + " customername int" +
                          "+ customernumber int" +
                          "+  customerstay int" +
                          "+  customerguests varchar(45)"
                          + ")");
              }
          } catch (SQLException e1) {
              System.err.println(e1.getMessage());
          }
      }
  
      @Nullable
      @NotNull
      public static Connection Connector() {
  
  
          try {
              Class.forName("com.mysql.jdbc.Driver");
              Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/login", "root", "password");
              return conn;
          } catch (Exception e) {
              return null;
          }
  
      }
      @NotNull
      @Nullable
      public  static ResultSet executeQuery(String query) {
  
          ResultSet result ;
  
          try {
               stmt = conn.createStatement();
              result=stmt.executeQuery(query);
  
  
  
          } catch (SQLException e) {
              System.out.println("Error here");
              e.printStackTrace();
              return null;
  
          }
          return result;
      }
      @NotNull
      @Nullable
      public boolean executeAction(String qu) {
          try {
              stmt = conn.createStatement();
              stmt.execute(qu);
              return true;
  
  
          } catch (SQLException e) {
              e.printStackTrace();
              return false;
          }
      }
  }
  </code></pre>
  
  <p>My Controller class</p>
  
  <pre><code>import com.sun.istack.internal.Nullable;
  import javafx.event.ActionEvent;
  import javafx.fxml.FXML;
  import javafx.fxml.FXMLLoader;
  import javafx.stage.*;
  import javafx.scene.*;
  import javafx.scene.layout.*;
  import javafx.scene.control.*;
  import javafx.geometry.*;
  
  import javafx.fxml.Initializable;
  import javafx.scene.control.Label;
  import javafx.scene.control.TextField;
  
  import java.net.URL;
  import java.sql.SQLException;
  import java.util.ResourceBundle;
  import javafx.*;
  public class Controller  implements Initializable {
      @NotNull
      @Nullable
      public LoginModel loginModel = new LoginModel();
      @FXML
  
      private Label isConnected,db;
      @FXML
      private TextField txtUsername;
      @FXML
      private TextField txtpassword;
  
      @FXML
      Button abutton = new Button("Login");
  
      private AddCustomer  addCustomer;
  
      @Override
      public void initialize(URL location, ResourceBundle resources) {
          // TODO Auto-generated method stub
          if (loginModel.isDBConnected()) {
              db.setText("Connected to DATABASE");
          } else {
              db.setText("Not Connected");
          }
      }
  
      public void Login (ActionEvent event ) {
          try {
              if (loginModel.isLogin(txtUsername.getText(), txtpassword.getText())) {
                  isConnected.setText("Correct");
                  try {
                      FXMLLoader addCustomer= new FXMLLoader(getClass().getResource("/sample/addcustomer.fxml"));
                      Parent root1 = (Parent)addCustomer.load();
                      Stage stage = new Stage();
                      stage.setScene(new Scene(root1));
                      stage.setTitle("ENTRY RECORD");
                      stage.show();
                  }
                  catch (Exception e){
                      e.printStackTrace();
                  }
  
              } else {
                  Alert alert=new Alert(Alert.AlertType.ERROR);
                  alert.setHeaderText(null);
                  alert.setContentText("YOU ARE NOT AUTHENTICATED");
                  alert.show();
  
  
              }
          } catch (SQLException e) {
  
              isConnected.setText("Incorrect");
              e.printStackTrace();
          }
      }
  
  
  }
  </code></pre>
  
  <p>FXML of COntroller Class</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  
  &lt;?import javafx.scene.control.Button?&gt;
  &lt;?import javafx.scene.control.Label?&gt;
  &lt;?import javafx.scene.control.PasswordField?&gt;
  &lt;?import javafx.scene.control.TextField?&gt;
  &lt;?import javafx.scene.layout.AnchorPane?&gt;
  &lt;?import javafx.scene.text.Font?&gt;
  
  &lt;AnchorPane prefHeight="335.0" prefWidth="526.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"&gt;
     &lt;children&gt;
        &lt;Label id="isConnected" fx:id="isConnected" layoutX="69.0" layoutY="27.0" prefHeight="45.0" prefWidth="165.0" textAlignment="CENTER" textFill="#e81313"&gt;
           &lt;font&gt;
              &lt;Font size="15.0" /&gt;
           &lt;/font&gt;&lt;/Label&gt;
        &lt;TextField fx:id="txtUsername" accessibleRole="MENU" layoutX="152.0" layoutY="124.0" promptText="Username" /&gt;
        &lt;Button fx:id="abutton" layoutX="201.0" layoutY="227.0" mnemonicParsing="false" onAction="#Login" text="Login" /&gt;
        &lt;PasswordField fx:id="txtpassword" layoutX="152.0" layoutY="154.0" promptText="Password" /&gt;
        &lt;Label fx:id="db" layoutX="247.0" layoutY="41.0" text="status"&gt;
           &lt;font&gt;
              &lt;Font size="15.0" /&gt;
           &lt;/font&gt;
        &lt;/Label&gt;
     &lt;/children&gt;
  &lt;/AnchorPane&gt;
  </code></pre>
  
  <p>My AddCustomer class
  Here I haven't add functionality for cancel button yet, just want to check 'save' button first.</p>
  
  <pre><code>package sample;
  
  import com.sun.istack.internal.NotNull;
  import com.sun.istack.internal.Nullable;
  import com.sun.org.apache.bcel.internal.generic.RETURN;
  import javafx.event.ActionEvent;
  import javafx.fxml.FXML;
  import javafx.scene.control.Alert;
  import javafx.scene.control.Button;
  import javafx.scene.control.TextField;
  
  public   class AddCustomer {
      @FXML
      public TextField number;
      @FXML
      public TextField name;
      @FXML
      public TextField stay;
      @FXML
      public TextField noofguests;
      @FXML
      public Button savebutton;
      @FXML
      public Button cancelbutton;
      @FXML
      @NotNull
      @Nullable
      public  void addcustomer(ActionEvent actionEvent) throws Exception {
  
  
              String customername = name.getText();
              String customernumber = number.getText();
              String customerstay = stay.getText();
              String customerguests = noofguests.getText();
              if (customername.isEmpty() || customerguests.isEmpty() || customernumber.isEmpty() || customerstay.isEmpty()) {
                  Alert alert = new Alert(Alert.AlertType.ERROR);
                  alert.setHeaderText(null);
                  alert.setContentText("PLEASE ENTER ALL THE FIELDS");
                  alert.show();
                  return;
  
              }
  
              String qu = "INSERT INTO CustomerDetails VALUES(" + "'" + customername + "'," +
                      "'" + customernumber + "'," +
                      "'" + customerstay + "'," +
                      "'" + customerguests + "'" + ")";
              System.out.println(qu);
  
          @NotNull
          @Nullable
          MysqlConnector mysqlConnector=new MysqlConnector();
          try {
  
              if (mysqlConnector.executeAction(qu)) {
                  @NotNull
                  @Nullable
                  Alert alert = new Alert(Alert.AlertType.INFORMATION);
                  alert.setHeaderText(null);
                  alert.setContentText("SUCCESS");
                  alert.show();
              } else {
                  @NotNull
                  @Nullable
                  Alert alert = new Alert(Alert.AlertType.ERROR);
                  alert.setHeaderText(null);
                  alert.setContentText("FAILED");
                  alert.show();
              }
          }
          catch(Exception e)
          { e.printStackTrace();}
  
      }
      public void cancel(ActionEvent actionEvent) {
      }
  }
  </code></pre>
  
  <p>My Add Customer FXML</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  
  &lt;?import java.lang.*?&gt;
  &lt;?import java.util.*?&gt;
  
  
  &lt;?import javafx.geometry.Insets?&gt;
  &lt;?import javafx.scene.control.Button?&gt;
  &lt;?import javafx.scene.control.TextField?&gt;
  &lt;?import javafx.scene.layout.AnchorPane?&gt;
  &lt;?import javafx.scene.layout.VBox?&gt;
  
  
  &lt;AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="599.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.AddCustomer"&gt;
      &lt;children&gt;
          &lt;VBox layoutX="44.0" prefHeight="400.0" prefWidth="513.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="44.0" AnchorPane.rightAnchor="43.0" AnchorPane.topAnchor="0.0"&gt;
              &lt;children&gt;
                  &lt;TextField fx:id="name" prefHeight="50.0" prefWidth="492.0" promptText="Customer Name"&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="10.0" right="10.0" top="30.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/TextField&gt;
                  &lt;TextField fx:id="number" layoutX="10.0" layoutY="10.0" prefHeight="53.0" prefWidth="492.0" promptText="Customer Number"&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/TextField&gt;
                  &lt;TextField fx:id="stay" layoutX="10.0" layoutY="10.0" prefHeight="52.0" prefWidth="492.0" promptText="Stay Period "&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/TextField&gt;
                  &lt;TextField fx:id="noofguests" layoutX="10.0" layoutY="35.0" prefHeight="50.0" prefWidth="492.0" promptText="No. Of Guests"&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/TextField&gt;
                  &lt;Button fx:id="savebutton" mnemonicParsing="false" onAction="#addcustomer" prefHeight="47.0" prefWidth="109.0" text="Save"&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="100.0" right="10.0" top="10.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/Button&gt;
                  &lt;Button fx:id="cancelbutton" mnemonicParsing="false" onAction="#cancel" prefHeight="46.0" prefWidth="110.0" text="Cancel"&gt;
                      &lt;VBox.margin&gt;
                          &lt;Insets bottom="10.0" left="300.0" right="10.0" top="-57.0" /&gt;
                      &lt;/VBox.margin&gt;
                  &lt;/Button&gt;
              &lt;/children&gt;
          &lt;/VBox&gt;
      &lt;/children&gt;
  &lt;/AnchorPane&gt;
  </code></pre>
  
  <p>Please help in getting this error fixed.</p>