我一直在做 搜索工具条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;
我相信错误其实是在前面的代码中,而不是在你这里提交的代码中。你在这里提供的代码(从你提供的链接中提取)是假定 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
}
}