0

我正在使用基于此问题中的建议的事件系统:在 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() {

       }
   });
4

1 回答 1

0

基于这个关于观察者模式的维基百科条目,我让事件系统工作!正如我怀疑的那样,Java 有一些预定义的系统来处理这类事情。

于 2012-12-09T20:56:56.080 回答