Java,JTextField.equals

Java,JTextField.equals,java,swing,user-interface,jtextfield,Java,Swing,User Interface,Jtextfield,我试图比较验证部分的JTextField中的值,以确保如果所有textfield都没有值,用户无法保存进度 这是我对文本字段的方法 public void DrawBookAttributes() { lblBookName = new JLabel("Book Name :"); lblBookName.setFont(getLblFont()); lblBookName.setSize(140, 20); lblBookName.setLocation(280

我试图比较验证部分的JTextField中的值,以确保如果所有textfield都没有值,用户无法保存进度

这是我对文本字段的方法

public void DrawBookAttributes() {
    lblBookName = new JLabel("Book Name :");
    lblBookName.setFont(getLblFont());
    lblBookName.setSize(140, 20);
    lblBookName.setLocation(280, 150);
    menuFrame.add(lblBookName);

    tfBookName = new JTextField();
    tfBookName.setSize(140, 20);
    tfBookName.setLocation(420, 150);
    menuFrame.add(tfBookName);

    lblBookID = new JLabel("Book ID :");
    lblBookID.setFont(getLblFont());
    lblBookID.setSize(140, 20);
    lblBookID.setLocation(280, 50);
    menuFrame.add(lblBookID);

    tfBookID = new JTextField();
    tfBookID.setSize(140, 20);
    tfBookID.setLocation(420, 50);
    tfBookID.setText("hello");
    tfBookID.setEditable(false);
    menuFrame.add(tfBookID);

    JLabel lblBookCost = new JLabel("Cost (£) :");
    lblBookCost.setFont(getLblFont());
    lblBookCost.setSize(140, 20);
    lblBookCost.setLocation(280, 200);
    menuFrame.add(lblBookCost);

    tfBookCost = new JTextField();
    tfBookCost.setSize(140, 20);
    tfBookCost.setLocation(420, 200);
    tfBookCost.addKeyListener(this);
    menuFrame.add(tfBookCost);

    lblBookYearOfPublication = new JLabel("Publication Date :");
    lblBookYearOfPublication.setSize(140, 20);
    lblBookYearOfPublication.setLocation(280, 250);
    lblBookYearOfPublication.setFont(getLblFont());
    menuFrame.add(lblBookYearOfPublication);

    JTextField tfBookYearOfPublication = new JTextField();
    tfBookYearOfPublication.setSize(140, 20);
    tfBookYearOfPublication.setLocation(420, 250);
    tfBookYearOfPublication.setText("DD-MM-YYYY");
    tfBookYearOfPublication.addActionListener(this);
    menuFrame.add(tfBookYearOfPublication);

    JLabel lblbookPublishngHouse = new JLabel("Publishing Orgaisation :");
    lblbookPublishngHouse.setSize(140, 20);
    lblbookPublishngHouse.setLocation(280, 300);
    lblbookPublishngHouse.setFont(getLblFont());
    menuFrame.add(lblbookPublishngHouse);

    JTextField tfBookPublishingHouse = new JTextField();
    tfBookPublishingHouse.setSize(140, 20);
    tfBookPublishingHouse.setLocation(420, 300);
    menuFrame.add(tfBookPublishingHouse);

    JLabel lblBookISBN = new JLabel("ISBN :");
    lblBookISBN.setSize(140, 20);
    lblBookISBN.setLocation(280, 350);
    lblBookISBN.setFont(getLblFont());
    menuFrame.add(lblBookISBN);

    JTextField tfBookISBN = new JTextField();
    tfBookISBN.setSize(140, 20);
    tfBookISBN.setLocation(420, 350);
    menuFrame.add(tfBookISBN);

    JLabel lblBookPages = new JLabel("Number of Pages :");
    lblBookPages.setSize(140, 20);
    lblBookPages.setLocation(280, 400);
    lblBookPages.setFont(getLblFont());
    menuFrame.add(lblBookPages);

    JTextField tfBookPages = new JTextField();
    tfBookPages.setSize(140, 20);
    tfBookPages.setLocation(420, 400);
    menuFrame.add(tfBookPages);

    menuFrame.setVisible(true);
}
这是验证部分

    public void EntryCheck() {

        if (tfBookName.getText().equals("")) {
            EntryChecker++;
            System.out.println(EntryChecker);
        }
        if (tfBookISBN.getText().equals("")) {
            EntryChecker++;
        }
        if (tfBookCost.getText().equals("")) {
            EntryChecker++;
        }
        if (tfBookPages.getText().equals("")) {
            EntryChecker++;
        }
        if (tfBookPublishingHouse.getText().equals("")) {
            EntryChecker++;
        }
        if (tfBookYearOfPublication.getText().equals("")) {
            EntryChecker++;
        }
        if (tfBookCost.getText().equals("DD-MM-YYY")) {
            EntryChecker++;
        }
        System.out.println(EntryChecker);
}
EntryChecker是一个整数,每当用户离开TextField而不在其中输入信息时,我都会给它添加一个值

每次调试程序时,我都会在验证行中遇到NullPointerException

if (tfBookISBN.getText().equals("")) {
        EntryChecker++; 
有人知道问题出在哪里以及如何解决吗


谢谢大家!

如果——正如你在评论中所说——你有

private JTextField tfBookISBN=new JTextField()

类中的全局范围,然后必须删除该行

JTextField tfBookISBN=newjtextfield()

DrawBookAttributes()

如果在声明时它没有初始化(我认为不是),您需要将该行保留在
DrawBookAttributes()
中,但作为initialize而不是declare,如下所示:

tfBookISBN=newjtextfield()


因为您正在方法中创建一个新字段,而未初始化全局字段,当
EntryCheck()
尝试访问该对象以调用
getText()

时,全局字段将创建一个NPE,您确定if语句中的
tfBookISBN
在创建字段时是同一个对象引用吗?我的意思是上面代码的作用域是什么,你有一个全局tfBookISBN吗?还有一个在方法中?i、 e发布更多代码:)@Yazan tfBookISBN是全局和私有的,我在一个方法中声明它,并在同一类中的另一个方法中访问它。@Yazan根据您的请求添加了两个方法中的所有代码。我已在下面发布了答案。