вот мой первый JList:JList NullPointerException в эксплуатации ValueChanged
JPanel classe = new JPanel();
class_list = new JList();
class_list.addListSelectionListener(this);
JScrollPane classeScrollPane = new JScrollPane(class_list);
classeScrollPane.setPreferredSize(new Dimension(175,405));
classe.setBorder(new TitledBorder("Classes"));
classe.add(classeScrollPane);
вот второй:
JPanel relation = new JPanel();
relation_list = new JList();
relation_list.addListSelectionListener(this);
JScrollPane relationScrollPane = new JScrollPane(relation_list);
relationScrollPane.setPreferredSize(new Dimension(220,130));
relation.setBorder(new TitledBorder("Relations"));
relation.add(relationScrollPane);
вот моя работа ValueChanged:
public void valueChanged(ListSelectionEvent e){
JList source = (JList) e.getSource();
String value = (String)source.getSelectedValue();
if (value.length() > 0){
if (source == class_list){
//if(!relation_list.isSelectionEmpty()) relation_list.clearSelection();
Class_object co = declaration.getClass(value);
attribut_list.setListData(co.getAttributes().toArray());
operation_list.setListData(co.getOperations().toArray());
if(declaration.getGeneralization(value) !=null){
subClass_list.setListData(declaration.getGeneralization(value).getSubClasses().toArray());
}
//clear JList if there is no correspondent subclass
else subClass_list.setListData(new String[2]);
//add relation content to relation panel
DefaultListModel model = new DefaultListModel();
related_association = declaration.getAssociation(value);
for(Association asso : related_association){
model.addElement("(R)"+asso.getName());
}
related_aggregation = declaration.getAggregation(value);
for(Aggregation agg : related_aggregation){
model.addElement("(A)"+agg.getName());
}
relation_list.setModel(model);
}
if (source == relation_list){
int focused_list = source.getSelectedIndex();
if(focused_list < related_association.size()){
details.setText(related_association.get(focused_list).toString());
}
else {
details.setText(related_aggregation.get(focused_list-related_association.size()).toString());
}
}
}
}
В основном, когда мы щелкните элемент в первом JList, он отображает во втором JList что-то (например, имя переменной этого элемента). Затем мы нажимаем на элемент во втором JList, он отображает больше информации об этом элементе в JTextArea. Таким образом, вы должны щелкнуть первый jlist для отображения второго jlist, затем щелкнуть второй jlist, чтобы отобразить подробную информацию. Вот проблема, после того, как я нажал первый JList и второй JList, я нажимаю еще один пункт в первом JList, NullPointerException происходит в строке "
если (value.length()> 0) {
Я понимаю, что ошибка происходит потому, что значение переменной равно нулю, но я не знаю, почему значение равно нулю. Может кто-нибудь сказать мне, что случилось с моим кодом. Большое спасибо.
Что неправильным является то, что значение равно null, что означает, что нет выбранного значения. Проверьте, что он не равен нулю, прежде чем вызывать метод на нем. Также используйте http://docs.oracle.com/javase/7/docs/api/javax/swing/event/ListSelectionEvent.html#getValueIsAdjusting%28%29 и ничего не делайте, пока значение корректируется. –
Дисплей в порядке, когда я переключаюсь между элементами в том же jlist, но не нормально, когда я выбрал элемент в JList, а затем попытаюсь изменить элемент в первом jlist. @ JBNizet – BroLegend