将JList中字符串移至另一JList时出现ClassCastException异常求助
解决JList字符串移动时的ClassCastException异常
兄弟,你这明显是踩了JList老API的坑!这个ClassCastException的根源非常清晰:你调用的jl1.getSelectedValues()方法返回的是Object[]类型,哪怕你给JList指定了泛型<String>,这个方法也不会自动帮你转换成String[],直接强转肯定就报错了。
给你两个靠谱的解决方案:
方案一:用Java 7+的新方法(推荐)
Java 7之后JList新增了getSelectedValuesList()方法,它会直接返回符合泛型的List<String>,转成数组给jl2就行:
jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List<String> selectedItems = jl1.getSelectedValuesList(); // 转成String数组,new String[0]是让JVM自动分配合适长度 jl2.setListData(selectedItems.toArray(new String[0])); } });
方案二:兼容老版本的手动转换
如果需要兼容Java 6及更早版本,那就手动遍历Object数组,逐个转成String:
jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object[] selectedObjects = jl1.getSelectedValues(); String[] selectedStrings = new String[selectedObjects.length]; for (int i = 0; i < selectedObjects.length; i++) { // 这里强转单个元素是安全的,因为jl1里存的都是String selectedStrings[i] = (String) selectedObjects[i]; } jl2.setListData(selectedStrings); } });
另外提个小建议:初始化jl2的时候可以给个空数组,比如jl2 = new JList<String>(new String[0]);,虽然你这里点击按钮才设置数据不会有空指针,但养成好习惯总是没错的~
内容的提问来源于stack exchange,提问作者darrenqiao
相关产品推荐
相关产品推荐

