gpt4 book ai didi

java - 我的程序抛出一个空指针异常,我不知道为什么。有人给我一双新鲜的眼睛吗?

转载 作者:行者123 更新时间:2023-11-29 07:57:59 25 4
gpt4 key购买 nike

大家好互联网。我正在用 Java 为我的 cs 类介绍程序编写一个程序,该程序创建一个带有 12 个按钮和一个文本字段的 gui。当用户按下其中一个按钮时,相应的字符就会显示在文本字段中。基本上,我创建了一个方法,该方法使用 12 个按钮对象的数组来用这些按钮填充按钮面板。此方法用于创建数组并用按钮对象填充的另一个类。当我运行该程序时,出现此错误:

Exception in thread "main" java.lang.NullPointerException
at TextButtonsHWPanel.<init>(TextButtonsHWPanel.java:26)
at TextButtonsHW.<init>(TextButtonsHW.java:56)
at TextButtonsHW.main(TextButtonsHW.java:77)

这是我的两个类:

public class TextButtonsHWPanel extends JPanel {
private JPanel buttonPanel;
private JScrollPane scrollPane;

/**
* Constructor
* @param buttons array of JButtons to appear in a grid for text input
* @param textArea JTextArea for display of text in response to pressed buttons
*/
public TextButtonsHWPanel(JButton[] buttons, JTextArea textArea) {
//TODO: Create a sub-panel with a 4 row, 3 column GridLayout
buttonPanel.setLayout(new GridLayout(4,3));
//TODO: Populate the grid with buttons
for (int i = 0; i < 12; i++) {
buttonPanel.add(buttons[i]);
}
//TODO: Add the grid panel to this panel
this.add(buttonPanel);
//TODO: Create a JScrollPane containing textArea
scrollPane = new JScrollPane(textArea);
//TODO: Set the preferred size of the scroll pane to 80x120
scrollPane.setPreferredSize(new Dimension(80, 120));
//TODO: Add the scroll pane to this panel
this.add(scrollPane);
}



public class TextButtonsHW extends JFrame implements ActionListener {
private JButton[] buttons; //Do not change
private JTextArea textArea; //Do not change
private String[] buttonNames = {"a", "b", "c", "1", "2", "3", "x", "y", "z", "Enter", "Space", "Clear"};

//Assign values for these constants in the constructor
private final int ENTER; //Index of Enter button in buttons
private final int SPACE; //Index of Space button in buttons
private final int CLEAR; //Index of Clear button in buttons

/**
* Set up this frame and its contents.
* @param title Title to appear in JFrame title bar
*/
public TextButtonsHW(String title) {
super(title); //call parent JFrame constructor to set the title

//TODO: instantiate all JButtons, add them to the buttons array,
// and register "this" as the ActionListener for each button.
buttons = new JButton[12];
for (int j = 0; j < buttons.length; j++) {
buttons[j] = new JButton(buttonNames[j]);
buttons[j].addActionListener(this);
}

//TODO: assign values to ENTER, SPACE, and CLEAR constants to
// indicate the indexes of those buttons in the buttons array
ENTER = 9;
SPACE = 10;
CLEAR = 11;

//TODO: create the JTextArea textArea
textArea = new JTextArea();

//TODO: set its "editable" property to false
textArea.setEditable(false);

//Create a TextButtonsHWPanel to display the buttons and textArea
TextButtonsHWPanel mainPanel = new TextButtonsHWPanel(buttons, textArea);

this.getContentPane().add(mainPanel);
this.pack();
}

/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
//TODO: update the text of textArea according to which
// button generated the ActionEvent.

}

/**
* Create this JFrame
* @param args not used
*/
public static void main(String[] args) {
final TextButtonsHW f = new TextButtonsHW("Text Buttons");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null); //centers frame on screen
f.setVisible(true);
}

此时我觉得我应该能够运行该程序并显示一堆什么都不做的按钮和一个空白文本字段。谁能看出我哪里出错了?

编辑:已解决

最佳答案

是的,看这里:

private JPanel buttonPanel;

这将使 buttonPanel 保留其默认值 null

现在构造函数的第一行:

buttonPanel.setLayout(new GridLayout(4,3));

...您正在取消引用 buttonPanel,它仍然是 null。砰。您需要为 buttonPanel 分配一个非空引用,例如

private JPanel buttonPanel = new JPanel();

您似乎正在为所有 other 变量赋值 - 尽管在构造函数主体中这样做,这也很好 - 只有这个缺失。

尽管堆栈跟踪应该向您显示哪一行抛出异常 - 这应该为您提供了足够的信息来解决问题。

关于java - 我的程序抛出一个空指针异常,我不知道为什么。有人给我一双新鲜的眼睛吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com