Java JCheckBox[x]是否为空?

Java JCheckBox[x]是否为空?,java,arrays,jcheckbox,Java,Arrays,Jcheckbox,我用代码创建了一个新项目,其中包含错误: package-benutzerschnitstelle; 导入java.awt.BorderLayout; 导入java.awt.EventQueue; 导入javax.swing.JFrame; 导入javax.swing.JPanel; 导入javax.swing.JTextField; 导入javax.swing.border.EmptyBorder; 导入javax.swing.JLabel; 导入javax.swing.JCheckBox;

我用代码创建了一个新项目,其中包含错误:

package-benutzerschnitstelle;
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.border.EmptyBorder;
导入javax.swing.JLabel;
导入javax.swing.JCheckBox;
公共类versuch扩展了JFrame{
私有静态JPanel内容窗格;
静态JCheckBox[]复选框;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
versuch框架=新的versuch();
frame.setVisible(true);
对于(int x=0;x<3;x++){
复选框=新的JCheckBox[3];
复选框[x]=新的JCheckBox(“Prüfungsfach”);
复选框[x]。立根(180,(60+(25*x)),120,21);
contentPane.add(复选框[x]);
}
对于(int x=0;x<3;x++){
试一试{
System.out.println(“复选框”+x
+“:”+复选框[x].isSelected());
}捕获(例外e){
System.out.println(“复选框处出错”+x
+“:”+e.getLocalizedMessage());
}
}
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共versuch(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100450300);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
}
}
由于在我有机会选择复选框之前就选中了复选框,因此输出应为:

checkbox 0: false
checkbox 1: false
checkbox 2: false
但结果是:

error at checkbox 0 : Cannot invoke "javax.swing.JCheckBox.isSelected()" because "benutzerschnittstelle.versuch.CheckBoxPruefungsfach[x]" is null
error at checkbox 1 : Cannot invoke "javax.swing.JCheckBox.isSelected()" because "benutzerschnittstelle.versuch.CheckBoxPruefungsfach[x]" is null
checkbox 2 : false
如果我改变数组的长度,最后一个复选框总是按预期的那样工作,其余的会导致错误。。。为什么呢?如何修复它?

在此循环中:

for(int x = 0; x < 3; x++)
{
    CheckBox = new JCheckBox[3];
    CheckBox[x] = new JCheckBox("Prüfungsfach");
    CheckBox[x].setBounds(180, (60 + (25 * x)), 120, 21);
    contentPane.add(CheckBox[x]);
}
for(int x=0;x<3;x++)
{
复选框=新的JCheckBox[3];
复选框[x]=新的JCheckBox(“Prüfungsfach”);
复选框[x]。立根(180,(60+(25*x)),120,21);
contentPane.add(复选框[x]);
}
您正在循环内重新分配数组
复选框
。这将覆盖当前
x
之前的所有值。因此,在上一次迭代中,您将把索引0和1处的框重置为
null

将数组的初始化移到循环之前以解决问题


CheckBox
对于复选框数组来说也是一个相当糟糕的名称。集合使用复数名(按照惯例,Java中的变量名以小写字母开头:
camelCase
)。

问题在于,每次循环运行时,您都在创建一个新数组,因为您在循环体中分配了它

for(int x=0;x<3;x++){
复选框=新的JCheckBox[3];
复选框[x]=新的JCheckBox(“Prüfungsfach”);
复选框[x]。立根(180,(60+(25*x)),120,21);
contentPane.add(复选框[x]);
}
移动
CheckBox=newjcheckbox[3]循环外部将阻止您在每次循环运行时覆盖此值


另外,为了更好地区分类名和变量,最好以小写字母开头变量。

好的,谢谢,现在可以了,谢谢,现在可以了