修饰符麻烦

时间:2012-12-09 02:33:29

标签: java events

我正在使用基于此问题中的建议的事件系统:Create Custom Event in Java

我在一个组件中实现了它,以处理和传递组件上按钮的事件。我把组件放入它自己的jar文件中。然后我在另一个项目中使用了组件和jar文件,当我尝试运行我用它创建的程序时,它给了我以下错误:

  

java.lang.IllegalAccessException:类Eventing.EventHandler无法使用修饰符“public”访问类outfit.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() {

       }
   });

1 个答案:

答案 0 :(得分:0)

基于观察员模式的this维基百科条目,我得到了活动系统!我怀疑Java有一些预先定义的系统用于这类事情。