当我更新 JList 时,我想在更新 JList 之前保留它的选择。更新 JList 时,它可以删除对象或添加对象。
这就是我现在所拥有的:
Object obj = list.getSelectedValue(); // This is line 47
list.clearSelection();
list.setListData(peerList);
if(obj != null)
{
int selectedIndex = list.getNextMatch(obj.toString(), 0, Position.Bias.Forward);
if(selectedIndex != -1)
list.setSelectedIndex(selectedIndex);
else
list.clearSelection();
}
但是有时,当添加或删除对象时,它会抛出异常:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3 >= 3
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.JList$5.getElementAt(Unknown Source)
at javax.swing.JList.getSelectedValue(Unknown Source)
at MyThread$1.run(MyThread.java:47) // I marked up top where line 47 is
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)