JavaFX项目执行Act.loadAct方法报NullPointerException异常求助
问题排查与修复方案
核心空指针原因
你触发空指针的根本原因是Act类中的ArrayList<Scene> lists成员变量从未进行初始化,默认值为null,当执行this.lists.add(scenes)时直接调用了null对象的方法,所以抛出空指针异常。
你之前测试的是新建的Scene对象属性不为空,但完全没检查要添加的目标列表本身是不是null。
其他存在的bug
loadAct方法中的循环变量i定义在读取文件的while循环之外,处理完第一行文本后i的值不会重置,后续行的角色列表会完全无法正确读取
setList2静态方法的写法完全无效:Java是值传递,方法内对形参list重新赋值不会影响外部的实参this.lists
- 字符串拆分后未做去空格处理,你的文本格式是用
-分隔,拆分后会残留多余空格,会导致后续展示时出现多余空白字符
- 字符串拆分后未做去空格处理,你的文本格式是用
- 带参的Act构造函数未对成员变量赋值,创建对象时传参也不会生效
修复代码
修正后的Act.java
package model; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class Act { String num; ArrayList<Scene> lists; // 修正带参构造 Act(String num, ArrayList<Scene> list) { this.num = num; this.lists = list; } // 修正无参构造,初始化lists public Act() { this.lists = new ArrayList<>(); } @SuppressWarnings("resource") public void loadAct(String file) throws IOException { BufferedReader br = null; br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { // 把i移到循环内,每行处理时重置为1 int i = 1; String [] value = line.split(","); // 按" - "拆分,避免多余空格 String [] tmp = value[0].split(" - "); this.num = tmp[0].trim(); String name = null; if (tmp.length == 3) { name = tmp[1].trim(); } else if (tmp.length ==4) { name = tmp[1].trim() + "-" + tmp[2].trim(); } Role roleP = null; if (tmp.length == 3) { roleP = new Role(tmp[2].trim()); } else if (tmp.length == 4) { roleP = new Role(tmp[3].trim()); } ArrayList<Role> roles = new ArrayList<Role>(); roles.add(roleP); while(i < value.length) { Role temp = new Role(value[i].trim()); roles.add(temp); ++i; } Scene scenes = new Scene(tmp[0], name, roles); int j =0; while (j < scenes.list.size()) { System.out.println(scenes.id + scenes.title + scenes.list.get(j).name); ++j; } this.lists.add(scenes); } } // 补充getter方便后续拿数据展示 public ArrayList<Scene> getLists() { return lists; } }
可选优化:类名冲突提醒
你的自定义Scene类和JavaFX自带的javafx.scene.Scene类名完全一致,后续代码里很容易出现导包冲突,建议把自定义的场次类重命名为DramaScene避免后续混淆。
内容的提问来源于stack exchange,提问作者Amnesiac
相关产品推荐
相关产品推荐

