&引用;java.lang.NullPointerException“;保存TextField值时-JavaFx

&引用;java.lang.NullPointerException“;保存TextField值时-JavaFx,java,sql,nullpointerexception,javafx,textfield,Java,Sql,Nullpointerexception,Javafx,Textfield,我试图将TextField值保存到数据库中,但得到了一个“java.lang.NullPointerException” 我希望在调用'addClient()'方法时将客户机的名字保存到数据库中 谁能帮我把它修好吗?提前谢谢大家 控制器类: import java.net.URL; import java.sql.SQLException; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.I

我试图将TextField值保存到数据库中,但得到了一个“java.lang.NullPointerException”

我希望在调用'addClient()'方法时将客户机的名字保存到数据库中

谁能帮我把它修好吗?提前谢谢大家

控制器类:

import java.net.URL;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
import wakiliproject.Forms.AddNew.DB.NewClientDB;

public class NewClientController implements Initializable {

    @FXML
    public TextField firstName;

    // Initializes the controller class.
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

    @FXML
    public void addClient() throws SQLException {
        new NewClientDB().main();
    }
}
数据库类:

import Database.Plain.Skell.DBConnect;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import wakiliproject.Forms.AddNew.NewClientController;

public class NewClientDB extends NewClientController {

    private String firstNames = new NewClientController().firstName.getText();

    public void main() throws SQLException {
        Connection conn = DBConnect.connect();
        Statement stmt = null;
        try {

            //STEP 3: Open a connection
            System.out.println("Connecting to a selected database...");
            System.out.println("Connected database successfully...");

            //STEP 4: Execute a query
            System.out.println("Inserting records into the table...");
            stmt = conn.createStatement();

            String sql = "INSERT INTO KIWI "
                    + "VALUES (102, " + (firstNames) + ")";
            stmt.executeUpdate(sql);
            System.out.println("Inserted records into the table...");

        } catch (SQLException se) {
            //Handle errors for JDBC
            se.printStackTrace();
        } catch (Exception e) {
            //Handle errors for Class.forName
            e.printStackTrace();
        } finally {
            //finally block used to close resources
            try {
                if (stmt != null) {
                    conn.close();
                }
            } catch (SQLException se) {
            }// do nothing
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException se) {
                se.printStackTrace();
            }//end finally try
        }//end try
        System.out.println("Goodbye!");
    }//end main
}
编辑:


我忘了提到这是在JavaFx中,而“TextField firstName”是从使用JavaFx SceneBuilder创建的FXML文件中调用的。我尝试在控制器中初始化它,但没有成功。有什么想法吗?我认为这些类型的对象不应该被初始化,至少JavaFx是这样

错误:

Caused by: java.lang.NullPointerException
    at wakiliproject.Forms.AddNew.DB.NewClientDB.<init>(NewClientDB.java:12)
    at wakiliproject.Forms.AddNew.NewClientController.addClient(NewClientController.java:41)
    ... 40 more
原因:java.lang.NullPointerException
位于wakiliproject.Forms.AddNew.DB.NewClientDB.(NewClientDB.java:12)
在wakiliproject.Forms.AddNew.NewClientController.addClient(NewClientController.java:41)
... 40多

在此行中,firstName为空

private String firstNames = new NewClientController().firstName.getText();
必须在构造函数中初始化变量,或在声明时在中初始化变量


public TextField firstName=new TextField()

我猜是这条线-

private String firstNames = new NewClientController().firstName.getText();

正在抛出
NullPointerException
。您正在创建一个新的
NewClientController
实例,但您从未初始化
firstName
实例变量。

请输入错误跟踪信息好吗?嘿。谢谢你看我的问题。刚刚添加了错误跟踪。DBConnect似乎为空…我不是JavaFX开发人员,但是我怀疑您的
initialize
方法中需要有比
//TODO
更多的内容。可能是重复的,我忘了提到这是在JavaFx中,并且“TextField firstName”是从使用JavaFx SceneBuilder创建的FXML文件中调用的。我尝试在控制器中初始化它,但没有成功。有什么想法吗?姓?在您发布的代码中,变量的名称是firstNameSorry。我的错。是的,是名字。类似于:private String firstNames=new NewClientController().firstName.getText();我忘了提到这是在JavaFx中,而“TextField firstName”是从使用JavaFx SceneBuilder创建的FXML文件中调用的。我尝试在控制器中初始化它,但没有成功。有什么想法吗?你有没有尝试过一步一步地调试并计算表达式new
NewClientController().firstName
以确保它不是
null
?我刚刚启动了JavaFx。我该怎么办?我不知道该怎么做:“一步一步地调试并计算表达式NewClientController().firstName以确保不为null”。