有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Swing窗体的Nullpointerexception

我目前在使用IntelliJ创建的程序中遇到问题:

下面是返回java代码的登录系统的代码。lang.NullPointerException每次我“成功”登录时:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class LoginForm extends JFrame{
    private JButton btnClear;
    private JPanel mainLoginPanel;
    private JButton btnLogin;
    private JTextField txtUsername;
    private JPasswordField pwdFieldPassword;
    private JLabel lblUsername;
    private JLabel lblPassword;
    private JPanel txtUsernamePanel;
    private JPanel pwdFieldPasswordPanel;
    private JPanel buttonsPanel;
    private JLabel lblTitle;

    static loginAccount[] accountsDatabase = new loginAccount[2];

    public static void main (String[] args)
    {
        LoginForm page = new LoginForm("Admin Login");
        page.setVisible(true);

        try {
            Scanner input = new Scanner(new File("src//adminAccountsCreds.txt"));
            input.useDelimiter("\n");

            while(input.hasNext())
            {
                for(int i = 0; i < accountsDatabase.length;i++)
                {
                    String tempName = input.nextLine();
                    String tempPassword = input.nextLine();
                    accountsDatabase[i] = new loginAccount(tempName, tempPassword);
                }
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public LoginForm(String title)
    {
        super(title);

        txtUsername.setEditable(true);
        pwdFieldPassword.setEditable(true);
        setContentPane(mainLoginPanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension( 400, 400));
        pack();
        this.setVisible(true);

        btnClear.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txtUsername.setText("");
                pwdFieldPassword.setText("");
            }
        });
        btnLogin.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                AuthenticateUser(txtUsername.getText(), new String (pwdFieldPassword.getPassword()));
                }
        });
    }

    public void AuthenticateUser(String usernameInput, String passwordInput)
    {
        boolean matchNotFound = true;
        for(int i = 0; i < accountsDatabase.length; i++) {
            if (accountsDatabase[i].username.equals(usernameInput) && accountsDatabase[i].password.equals(passwordInput)){
                matchNotFound = false;
                break;
            }
        }

        if(matchNotFound)
        {
            System.out.println("Match not found!");
        }

        else
        {
            setVisible(false);
            dispose();
            //System.out.println("Match found!");
            StockDatabaseForm nextPage = new StockDatabaseForm("nextPage");
            nextPage.setVisible(true);
        }
    }

    private void createUIComponents() {
        // TODO: place custom component creation code here
    }
}
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class StockDatabaseForm extends JFrame{
    private JPanel mainStockDBPanel;
    private JTable dataTableStock;
    private JPanel dataTablePanel;
    private JPanel inputsPanel;
    private JButton btnDelete;
    private JButton btnAdd;
    private JButton btnEdit;
    private JPanel btnPanel;
    private JPanel itemDataPanel;
    private JLabel lblItemName;
    private JTextField txtItemName;
    private JLabel lblPrice;
    private JTextField txtItemPrice;

    static StockDatabase stockDatabaseInstance = new StockDatabase();

    public static void main(String[] args)
    {
        StockDatabaseForm page = new StockDatabaseForm("Stock Database");
        page.setVisible(true);

        try {
            Scanner input = new Scanner(new File("src//testStockData.txt"));
            input.useDelimiter("\n");

            while(input.hasNext())
            {
                for(int i = 0; i < stockDatabaseInstance.itemsInStock.length;i++)
                {
                    String tempName = input.nextLine();
                    float tempPrice = Float.valueOf(input.nextLine());
                    stockDatabaseInstance.itemsInStock[i] = new StockItem(tempName, tempPrice);
                }
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public StockDatabaseForm(String title)
    {
        super(title);
        setContentPane(mainStockDBPanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension( 500, 500));
        pack();
        this.setVisible(true);
    }

    private void createUIComponents() {
        // TODO: place custom component creation code here
    }
}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "javax.swing.AbstractButton.setText(String)" because "<local8>" is null
    at StockDatabaseForm.$$$setupUI$$$(StockDatabaseForm.java)
    at StockDatabaseForm.<init>(StockDatabaseForm.java:51)
    at LoginForm.AuthenticateUser(LoginForm.java:94)
    at LoginForm$2.actionPerformed(LoginForm.java:69)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6614)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6379)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

我一直在试图修复这个错误。有没有人可以浏览一下这段代码,看看他们是否可以建议如何修复这些错误,因为这些错误会影响项目的功能和我个人的心理健康(这是针对uni任务的)


共 (1) 个答案

  1. # 1 楼答案

    我想你需要把这个小组列出来。试试这个:

    public StockDatabaseForm(String title)
        {
            super(title);
            mainStockDBPanel panel = new mainStockDBPanel();
            setContentPane(panel);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setPreferredSize(new Dimension( 500, 500));
            pack();
            this.setVisible(true);
        }