java.lang.ClassCastException: com.codename1.ui.Label不能被转换为com.codename1.component.MultiButton。

问题描述 投票:0回答:1

我一直在做 搜索工具条CodeNameOne API 并遇到CLassCastException

for(Component cmp : f.getContentPane()) {
        MultiButton mb = (MultiButton)cmp;
        String line1 = mb.getTextLine1();
        String line2 = mb.getTextLine2();
        boolean show = line1 != null && line1.toLowerCase().indexOf(text) > -1 ||
                line2 != null && line2.toLowerCase().indexOf(text) > -1;
        mb.setHidden(!show);
        mb.setVisible(show);
    }

输出的错误就指向这一行。

MultiButton mb = (MultiButton)cmp;

java codenameone
1个回答
1
投票

我相信错误其实是在前面的代码中,而不是在你这里提交的代码中。你在这里提供的代码(从你提供的链接中提取)是假定 f.getContentPane() 只包含 MultiButton 而不是其他类型的 Component.

在你所链接的例子中,创建者正在通过组件迭代,将每个组件转换为一个 MultiButton. 为了使这个投递成功,被分配给 cmp 循环的每一次迭代中,实际上都必须是一个 MultiButton.

在你的代码中,当你在for-loop中迭代的时候,有一点cmp被分配了一个类型为 com.codename1.ui.Label,这种类型不是一个 MultiButton 所以投胎失败并抛出运行时异常 java.lang.ClassCastException.

要修复:要么确保 ContentPane 只包含 MultiButton或在你的for循环中添加一个检查,如果组件不是一个 MultiButton 像以下。

for(Component cmp : f.getContentPane()) {
    if(cmp instanceof MultiButton) {
        // your original for-loop body here
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.