gpt4 book ai didi

Java:在封闭范围内定义的局部变量 mi 必须是最终的或实际上是最终的

转载 作者:太空狗 更新时间:2023-10-29 22:37:45 25 4
gpt4 key购买 nike

我收到错误,如主题所示,请教您如何修复它...错误在 menuItem-loop 中,我尝试将 textArea 前景色设置为从 menuItem 中选择的颜色:(colors[mi])

    String[] colors = {
"blue",
"yellow",
"orange",
"red",
"white",
"black",
"green",
};

JMenu mnForeground = new JMenu("Foreground");
for (int mi=0; mi<colors.length; mi++){
String pos = Character.toUpperCase(colors[mi].charAt(0)) + colors[mi].substring(1);
JMenuItem Jmi =new JMenuItem(pos);
Jmi.setIcon(new IconA(colors[mi]));

Jmi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem) e.getSource();
IconA icon = (IconA) item.getIcon();
Color kolorIkony = getColour(colors[mi]); // ERROR HERE: (colors[mi])
textArea.setForeground(kolorIkony);
}
});

mnForeground.add(Jmi);
}

public Color getColour(String colour){
try {
kolor = Color.decode(colour);
} catch (Exception e) {
kolor = null;
}
try {
final Field f = Color.class.getField(colour);
kolor = (Color) f.get(null);
} catch (Exception ce) {
kolor = Color.black;
}
return kolor;
}

最佳答案

错误意味着您不能使用局部变量mi在内部类中


要在内部类中使用变量,您必须声明它 final .只要mi是循环的计数器,final无法分配变量,您必须创建一个解决方法来获取 mi final 中的值可以在内部类内部访问的变量:

final Integer innerMi = new Integer(mi);

所以你的代码将是这样的:

for (int mi=0; mi<colors.length; mi++){

String pos = Character.toUpperCase(colors[mi].charAt(0)) + colors[mi].substring(1);
JMenuItem Jmi =new JMenuItem(pos);
Jmi.setIcon(new IconA(colors[mi]));

// workaround:
final Integer innerMi = new Integer(mi);

Jmi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem) e.getSource();
IconA icon = (IconA) item.getIcon();
// HERE YOU USE THE FINAL innerMi variable and no errors!!!
Color kolorIkony = getColour(colors[innerMi]);
textArea.setForeground(kolorIkony);
}
});

mnForeground.add(Jmi);
}
}

关于Java:在封闭范围内定义的局部变量 mi 必须是最终的或实际上是最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33799800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com