java - JCheckBox[x] 为空?
问题描述
我只用代码创建了一个新项目,其中包含错误:
package benutzerschnittstelle;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JCheckBox;
public class versuch extends JFrame {
private static JPanel contentPane;
static JCheckBox[] CheckBox;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
versuch frame = new versuch();
frame.setVisible(true);
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++) {
try {
System.out.println("checkbox " + x
+ " : " + CheckBox[x].isSelected());
} catch (Exception e) {
System.out.println("error at checkbox " + x
+ " : " + e.getLocalizedMessage());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public versuch() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new 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]);
}
您正在CheckBox
循环内重新分配数组。这将覆盖当前x
. 因此,在最后一次迭代中,您将索引 0 和 1 处的框重置为null
.
在循环之前移动数组的初始化以解决问题。
CheckBox
对于复选框es的数组来说,这也是一个相当糟糕的名称。对集合使用复数名称(按照约定,Java 中的变量名称以小写字母开头:camelCase
)。
推荐阅读
- sockets - 如何从非阻塞 socket.send 上的 EAGAIN 错误中恢复?
- php - 使用 PHP 对 JSON 数组进行排序
- python - pytesseract 读取包含流行数字字体的计算机生成图像的准确度如何?
- javascript - React-native unidentified 不是对象
- javascript - 如何控制闪亮仪表板的放大和缩小?
- c++ - std::is_same 对代码的性能有影响吗?
- c - 为什么我对 leetcode 977 Squares of a Sorted Array 的解决方案失败了
- github - 如何使用 github Actions 工作流 git pull origin
- machine-learning - 错误:度量 Kappa 不适用于回归模型
- javascript - 在 Javascript 中设置文章的宽度不会更新