gpt4 book ai didi

java - 如何使用动态 JLabels 和 JButton 创建新的 JFrame 而不会遇到 NullPointerException?

转载 作者:行者123 更新时间:2023-12-01 22:31:12 28 4
gpt4 key购买 nike

我一直在尝试创建一个场景,其中单击按钮时,会生成一个新的 JFrame,其中包含 x 数量的 JLabels 和 JButton(x 取决于程序另一部分中的用户输入)。但是,每当我尝试执行此操作时,都会收到“线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException”错误我无法弄清楚错误是什么。我的代码的语法很好并且编译没有错误。加粗的代码(不是真正的加粗,但有 ...)是错误指向的行。还有其他指向的行,但这些是由 java 生成的行。

**public class MainUI extends javax.swing.JFrame {**

public MainUI() {
initComponents();
}
private void ViewList(java.awt.event.ActionEvent evt) {
this.dispose();
ListFrame list = new ListFrame();
ArrayList<Type1> miniList1 = DataStorage.getMiniList1();
ArrayList<Type2> miniList2 = DataStorage.getMiniList2();
int counter = 0;
java.awt.Label[] rLabels;
rLabels = new java.awt.Label[miniList1.size() + miniList2.size()];
javax.swing.JButton[] rButtons;
rButtons = new javax.swing.JButton[rLabels.length];
for (int g=0;g<rLabels.length;g++)
{
**rLabels[g].setPreferredSize(new Dimension(150,35));**
rLabels[g].setAlignment(Label.CENTER);
rLabels[g].setLocation(30,30*g);
}
for (int h=0;h<rButtons.length;h++)
{
rButtons[h].setText("Show");
}
for (int i=counter;i<miniList1.size();i++)
{
String name1 = miniList1.get(i).getName();
rLabels[i].setText(name1);
Type1 item1 = miniList1.get(i);
rButtons[i].addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
ItemScreen iScreen = new ItemScreen();
String item1Display = DataStorage.type1ToString(item1);
iScreen.iTitleLabel.setText(name1);
iScreen.iTextLabel.setText(item1Display);
iScreen.setVisible(true);
}

});
counter++;
}
for (int j=counter;j<miniList2.size() + counter;j++)
{
String name2 = miniList2.get(j-counter).getName();
rLabels[j].setText(name2);
Type2 item2 = miniList2.get(j);
rButtons[i].addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
ItemScreen iScreen = new ItemScreen();
String item2Display = DataStorage.type2ToString(item2);
iScreen.iTitleLabel.setText(name2);
iScreen.iTextLabel.setText(item2Display);
iScreen.setVisible(true);
}

});
}
for (int m=0;m<rLabels.length;m++)
{
list.add(rLabels[m]);
}
for (int n=0;n<rLabels.length;n++)
{
list.add(rButtons[n]);
}
list.setVisible(true);
}

ListFrame 和 ItemScreen 是我的项目中的 JFrame,DataStorage 是我的项目中的另一个类。 Type1 和 Type2 是对象。我正在使用 NetBeans。

最佳答案

当您创建数组时,它会创建 n 个空/未初始化的槽

所以当你做类似的事情时......

rLabels = new java.awt.Label[miniList1.size() + miniList2.size()];

你拥有的只是一个null元素数组...

在给定位置修改对象之前,需要初始化给定槽的值...

for (int g=0;g<rLabels.length;g++)
{
rLabels[g] = new JLabel();
//...
}

这适用于所有数组。看看the Arrays tutorial了解更多详情

关于java - 如何使用动态 JLabels 和 JButton 创建新的 JFrame 而不会遇到 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712618/

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