[英]Anonymous ActionListener Class Exception “NullPointerException”
[英]Disable actionListener for JComboBox (when using anonymous class)
我在JComboBox event中使用actionListener。 当我手动设置程序中选择的项目时,我想禁用监听器。
在这里您可以看到-
String item=null;
String isSetByProgram=false;
jcb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
if(isSetByProgram)
return;
item=jcb1.setSelectedItem();
}
});
//Now set by program
isSetByProgram = true;
jcb1.setSelectedItem("customItem1");
isSetByProgram=false;
但是在这里我得到这个:
错误:从内部类引用的局部变量必须是final或有效的final
我如何才能做到这一点,而又不用另外一个扩展JComboBox的类呢?
将item
和isSetByProgram
移到类的私有字段中。 实例字段专门用于存储状态。
public class MyApplication {
private boolean isSetByProgram;
private String item;
// ...
jcb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae){
if (isSetByProgram) {
return;
}
item = jcb1.getSelectedItem();
}
});
//Now set by program
isSetByProgram = true;
jcb1.setSelectedItem("customItem1");
EventQueue.invokeLater(() -> { isSetByProgram = false; });
据我所知你做不到。 这是因为您的匿名类在变量的副本上工作(如果不是最终变量),并且可以更改,并且在这种情况下是不允许的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.