0

对于我的一生,我无法弄清楚我的 JList 出了什么问题。我有一个 DefaultListModel 对象,其中包含从这些对象的 HashMap 填充的自定义数据类型。一切正常,直到组中有 16 个或更多对象。这是发生的事情:

01 02 03 04 05

如您所知,列表中突然出现空白,即使它从中填充的 HashMap 没有任何空对象。此外,这里是用于填充 JList 的代码:

for(Entry<Integer, TV_Season_v2> e : rc.shows.get(index).seasons.entrySet()){
    seasonslistmodel.addElement(e.getValue());
}

这是给出空指针异常的行:

int mapSeasonIndex = seasonsList.getSelectedValue().getSeasonNum();

到底是怎么回事?

4

3 回答 3

0

对于任何遇到我措辞不好的问题的人来说,解决这个问题的方法是实现自己的循环来填充列表。

最初,我使用了一个 java 增强的 for 循环,如下所示:

for(Entry<Integer, TV_Episode_v2> e : rc.shows.get(showIndex).seasons.get(mapSeasonIndex).episodes.entrySet()){
        episodeslistmodel.add(e.getKey()-1,e.getValue());
}

出于某种原因,如果 episodes.size() 大于 15,此方法将遍历 null 结果,因此我实现了自己的迭代方法:

//Add elements to list model
int i = 0; //variable to show the index
int c = 0; //variable to count the number of episodes
while(c < rc.shows.get(showIndex).seasons.get(seasonIndex+1).episodes.size()){
    if(rc.shows.get(showIndex).seasons.get(seasonIndex+1).episodes.containsKey(i)){ //if the season contains the key i
        episodeslistmodel.add(i-1, rc.shows.get(showIndex).seasons.get(seasonIndex+1).episodes.get(i)); //add to the list
        c++; //increment up to count the number of objects found
    }
    i++;
}

这不会产生错误,并将所有项目放在 JList 中的适当位置。我希望这对阅读这篇文章的人有所帮助。

于 2013-10-23T18:08:49.130 回答
0

如果您在上面给出的行中得到 NPE,我确定那seasonsList.getSelectedValue()null. 从 JList.getSelectedValue() Javadoc:

如果没有选择,则返回 {@code null}。

然后是空单元格......如果没有显示更多代码,我真的无法分辨,但它可能e.getValue()null用于某些条目吗?

for(Entry<Integer, TV_Season_v2> e : rc.shows.get(index).seasons.entrySet()){
    seasonslistmodel.addElement(e.getValue());
}
于 2013-10-23T05:06:07.077 回答
0

请确保SeasonsList已正确初始化。

于 2013-10-23T05:06:29.700 回答