我在JTable
中有自定义渲染器。当我的JTable
显示时,我会在NullPointerException
上获得JTable.prepareRenderer()
。我不确定我的自定义渲染器的哪个部分无法预测,但我确定这是我的错。
我的渲染器的简化版本(this spot处的完整版):
public class GradeRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object grade,
boolean isSelected, boolean hasFocus, int row, int column) {
if (grade == null) return new JLabel();
Grade myself = (Grade) grade;
int score = myself.getScore();
setText(String.valueOf(score));
Assessment thing = myself.getThing();
GradeStatus status = myself.getStatus();
AssessmentType type = thing.getType();
// do some work with status
// do some work with type
return this;
}
}
添加渲染器的代码(完整版here):
model = new GradeEntryModel();
table = new JTable(model);
// some work with table
table.setDefaultRenderer(Grade.class, new GradeRenderer(true));
关于我出错的地方的任何指示?
答案 0 :(得分:1)
NPE消息将为您提供导致错误的声明。所以这是开始寻找的地方。一旦知道哪个变量为null,就可以开始解决问题了。我们无法帮助您,因为我们不知道错误发生在哪里。
我唯一认为可以建议您不要使用“return null”来返回null渲染器。您可以将文本设置为“”或类似的内容,然后返回渲染器。
如果您需要更多帮助,请发布展示问题的SSCCE。
答案 1 :(得分:1)
我同意camickr,NPE告诉你什么是null,所以应该给你一个线索。
但是看着你的代码我猜
if (grade == null) return null;
返回null是触发NullPointerException的好方法
答案 2 :(得分:0)
原来model
中的部分数据是null
。那就做了。