【问题标题】:Modifier trouble修改器麻烦
【发布时间】:2012-12-10 10:36:54
【问题描述】:

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

       }
   });

【问题讨论】:

  • 您应该在问题中包含一些代码。

标签: java events


【解决方案1】:

基于this wikipedia entry on Observer Patterns,我让事件系统正常工作!我怀疑 Java 有一些预定义的系统来处理这些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-04-10
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    相关资源
    最近更新 更多