当前位置: 首页 > 知识库问答 >
问题:

保存TextField值时的“java.lang.NullPointerException”-JavaFx

华涵意
2023-03-14

我试图将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

共有2个答案

轩辕经赋
2023-03-14

我猜是这条线-

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

正在引发NullPointerException。您正在创建NewClientController的新实例,但从未初始化firstName实例变量。

璩华辉
2023-03-14

在这一行中,firstName为空

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

必须在构造函数中或在声明时初始化变量

public TextField firstName=新建TextField();

 类似资料:
  • 问题内容: 我根据另一个问题编写了一个非常简单的代码,它是: 丢给我一个错误 java.lang.NullPointerException第5和17行 我不知道我在做什么错。 问题答案: 无法自动拆箱为原始值,当您尝试与进行比较时会发生这种情况。在 类型为,因此左侧操作数也必须为。您正在传入,这是一个对象,但可以自动拆箱到。 因此,这相当于 显然,如果是,则以上抛出。 为了避免自动拆箱的隐藏陷阱,

  • 我有一个字符串值,格式为“星期二 4月30 00:00:00 UTC 1996”; .我希望将此值转换为“30-APR-96 05:30:00.000000000 AM”中的时间戳字段 我在这里尝试的是 我得到一个异常时间戳格式必须是yyyy-mm-dd hh:mm:ss[。ffffff] 在DB中,当我看到我的类型为Timestamp并且值存储在“30-APR-96 05:30:00.00000

  • 问题内容: 我想一种添加到我当过用户更改的,它的值,应用程序在控制台上打印的东西。 我进行了搜索,发现以下非常相似的问题:JTextField的值更改侦听器 提到的问题的答案非常清楚和有效,但是不幸的是,它仅对(Not )有用,因为它说您应该像这样使用DocumentListener: 但是在JavaFX的TextField中,您无法执行此操作。所以?解决办法是什么? (使用代码进行描述可能会很好

  • 我有一个方法,我有一个问题。下面的第二个方法promptForPinNumber()调用第一个方法canConvertToInteger(),然后根据布尔变量pinValid的值是true还是false执行操作。 当我单独执行方法canConvertToIntger()时,它运行良好,并且pinValid的值是正确的。 当我执行promptForPinNumber()并输入引发和异常的字符串时,p

  • 我有一个格式为“2013-11-19 07:41:38.990000000”的字符串值。我希望将此值转换为oracle数据库中“19-nov-13 07.41.38.00000000000 am”格式的时间戳字段。 我已经尝试使用以下代码进行转换: 但是在插入时,它会生成以下错误:ORA-01843:不是一个有效的月份

  • 由于某些原因,gridView中的值没有从包中保存。也没有向logcat输出任何内容。我是否正确地从gridview获取值?它充满了编辑文本,因此应该从中获取值 航海日志