Java 如何修复NullPointerException并将数据放入NatTable
当我尝试使用这段代码时:Java 如何修复NullPointerException并将数据放入NatTable,java,nullpointerexception,swt,nattable,Java,Nullpointerexception,Swt,Nattable,当我尝试使用这段代码时: students.add(new Student("John","1", 3)); students.add(new Student("Chris","2", 2)); NatTable table = createTable(shell, students); table.refresh(); 出现NullPointerException,可能是因为学生类中的getter或生成表时出错。出现此问题时的另一条消息是ReflectVersionPropertyAcces
students.add(new Student("John","1", 3));
students.add(new Student("Chris","2", 2));
NatTable table = createTable(shell, students);
table.refresh();
出现NullPointerException,可能是因为学生类中的getter或生成表时出错。出现此问题时的另一条消息是ReflectVersionPropertyAccessor.getDataValue。此外,我还需要修复NatTable中的ColumnGroup以正确显示许多检查
它给了我(代码中的第48行是学生构造函数):
我最初的考试和学生课程。
public static class Student {
private String name;
private String groupNumber;
private Exam[] exams;
public Student() { }
public Student(String name, String groupNumber, int numbOfExams) {
this.name = name;
this.groupNumber = groupNumber;
this.exams = new Exam[numbOfExams];
for(int i=0;i<numbOfExams;i++) {
exams[i]= new Exam();
this.exams[i].setName("");
this.exams[i].setMark(0);
}
}
public String getName() {
return name;
}
public String getGroupNumber() {
return groupNumber;
}
public void setName(String name) {
this.name = name;
}
public void setGroupNumber(String groupNumber) {
this.groupNumber = groupNumber;
}
public void setExam(Exam[] exams) {
this.exams = exams;
}
public Exam[] getExam() {
return exams;
}
}
public static class Exam {
private String name;
private int mark;
public Exam() { }
public Exam(String name, int mark) {
this.name = name;
this.mark = mark;
}
public String getName() {
return name;
}
public int getMark() {
return mark;
}
public void setName(String name) {
this.name = name;
}
public void setMark(int mark) {
this.mark = mark;
}
}
公共静态类学生{
私有字符串名称;
私有字符串组号;
私人考试[]考试;
公立学生(){}
公立学生(字符串名称、字符串组号、整数){
this.name=名称;
this.groupNumber=groupNumber;
this.exams=新考试[numbOfExams];
对于(inti=0;i,您的问题是您有嵌套对象,并且希望通过反射来访问它们。这不起作用
如果您的学生只有一次考试,您需要将属性名称更改为:
String[] propertyNames = { "name", "groupNumber", "exam.name", "exam.mark" };
以及数据提供者对此的定义:
IDataProvider bodyDataProvider =
new ListDataProvider<>(
students,
new ExtendedReflectiveColumnPropertyAccessor<Student>(propertyNames));
IDataProvider bodyDataProvider=
新ListDataProvider(
学生,
新的ExtendedReflectColumnPropertyAccessor(propertyNames));
但是你的Student
类有一个EXAME
对象数组。你想如何在表中可视化这样一个树结构呢?NatTable可以做到这一点,但是你需要更多的东西,比如TreeLayer
等,而这反过来又不适用于你的数据结构
我建议您首先考虑您想要可视化的内容,然后检查哪个控件适合您的需要(是表还是树?),然后检查一些确实存在的教程,如或或在哪一行获得NPE?没有stacktrace,没有行号,…任何人都能提供帮助吗?第一个代码段没有说明任何有关shell
实例的内容。您从哪里获得它或如何创建它?以及您的代码如何编译调用this.tests[i].setMark();
和方法签名setMark(int-mark)
需要一个int值?首先,您使用的是NatTable的一个古老版本。大约六年前,当我们迁移到Eclipse时,SourceForge版本已经被弃用了好几年。您将无法获得对该版本的太多支持,并且可能会遇到许多问题。我不明白为什么人们仍然使用该版本。其次,您已经对象(考试在Student下方),您希望可以通过反射神奇地检查此对象?实现自定义数据提供程序或使用具有正确属性定义的ExtendedReflectDataProvider。查看我们的入门教程可能会有所帮助。
String[] propertyNames = { "name", "groupNumber", "exam.name", "exam.mark" };
IDataProvider bodyDataProvider =
new ListDataProvider<>(
students,
new ExtendedReflectiveColumnPropertyAccessor<Student>(propertyNames));