【发布时间】:2019-10-04 20:25:35
【问题描述】:
尝试在我正在制作的简单 GUI 中预实例化一组 JTextField。我将它们放入一个数组中,这样当我更改状态时,我可以循环它们并使用简单的 for 循环清除数据。在我在构造函数中实例化窗口中使用的每个对象后,程序崩溃了。我已经包含了声明数组和 5 个按钮对象的 2 行。我还包括我如何实例化每个 TextField。 代码在调用我的 clear 方法时崩溃,空指针异常。经过仔细检查,我发现我的字段 [0] 到字段 [4] 都是空的。我不知道为什么。 tf1 到 tf5 不为 null
//instantiation of fields t1, t2, t3, t4, t5 and fields array
private JTextField tf1, tf2, tf3, tf4, tf5;
private JTextField[] fields = {tf1, tf2, tf3, tf4, tf5};
//In the constructor
tf1 = new JTextField();
//clear method called after all objects are instantiated
private void clear() { for(JTextField f : fields) f.setText(""); }
预期字段[0] 具有相同的 tf1 值,但为空;
【问题讨论】:
-
Java 是按值传递的。它不会“链接”到变量。它将在数组创建时将变量指向的任何内容放入数组中,即
null。它不会记住变量并在变量更新时更新。 -
为什么不
fields[0] = new JTextField()?