You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:28