点击OK按钮时添加AcquisitionListener报错的技术问题咨询
解决MicroManager添加AcquisitionListener时的类型不匹配问题
这个错误的原因其实很直白——你搞混了this关键字的指代对象!
当你在匿名ActionListener的actionPerformed方法里写this时,这个this指的是当前这个匿名的ActionListener实例,而MicroManager.addAcquisitionListener()需要的参数类型是AcquisitionListener,两者类型不匹配,所以编译器直接报错了。而你在点击事件代码块外调用时,this指代的是你的主类实例(我猜你的主类应该已经实现了AcquisitionListener接口),所以类型是对的,能正常执行。
给你两种解决思路:
1. 如果你的主类已经实现了AcquisitionListener接口
直接使用外部类的this来指定正确的实例,写法是你的主类名.this:
mainFrame.setOkAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) //On OK click { // 替换成你实际的主类名称,比如MainWindow.this MicroManager.addAcquisitionListener(YourMainClass.this); } });
2. 如果你的主类没实现AcquisitionListener
可以在点击事件内部直接创建一个AcquisitionListener的匿名实例,或者提前定义好监听器对象再复用:
方式一:直接创建匿名AcquisitionListener
mainFrame.setOkAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) //On OK click { MicroManager.addAcquisitionListener(new AcquisitionListener() { @Override public void acquisitionStarted(AcquisitionEvent event) { // 在这里实现采集开始时的逻辑 } @Override public void acquisitionEnded(AcquisitionEvent event) { // 在这里实现采集结束时的逻辑 } // 记得实现AcquisitionListener接口要求的所有抽象方法 }); } });
方式二:提前定义监听器实例(适合需要复用的场景)
// 在你的类成员位置定义监听器 private AcquisitionListener myAcqListener = new AcquisitionListener() { @Override public void acquisitionStarted(AcquisitionEvent event) { // 自定义逻辑 } @Override public void acquisitionEnded(AcquisitionEvent event) { // 自定义逻辑 } }; // 然后在OK按钮事件中添加 mainFrame.setOkAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) //On OK click { MicroManager.addAcquisitionListener(myAcqListener); } });
内容的提问来源于stack exchange,提问作者Zyzyx
相关产品推荐
相关产品推荐

