我正在使用基于此问题中的建议的事件系统:在 Java 中创建自定义事件
我在一个组件中实现了它来处理和传递来自组件上的按钮的事件。我将组件放入它自己的 jar 文件中。然后我在另一个项目中使用了组件和 jar 文件,当我尝试运行我用它创建的程序时,它给了我以下错误:
java.lang.IllegalAccessException:Eventing.EventHandler 类无法访问带有修饰符“public”的类 suit.proto.frmDo$1 的成员
这是我写的 EventHandler 类的代码:
public class EventHandler<T> {
private ArrayList<T> listenerPool = new ArrayList<>();
public void addListener(T listener){
listenerPool.add(listener);
}
public void raiseEvent(Object eventData){
for (T listener : listenerPool){
try {
if (eventData != null) {
listener.getClass().getDeclaredMethods()[0].invoke(listener, eventData);
} else {
listener.getClass().getDeclaredMethods()[0].invoke(listener);
}
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
Logger.getLogger(EventHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
这就是我在组件上设置 EventHandler 类的方式:
EventHandler<EventListener> _loginEvent = new EventHandler<>();
public EventHandler<EventListener> loginEvent(){
return _loginEvent;
}
loginButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
_loginEvent.raiseEvent(null);
}
});
这就是我在 frmDo 上捕捉事件所做的:
this.component2.loginEvent().addListener(new EventAdapter() {
@Override
public void executeResult() {
}
});