当前位置: 首页 > 知识库问答 >
问题:

修饰符麻烦

袁波
2023-03-14

我使用的事件系统基于这个问题中的建议:在Java中创建自定义事件

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

Java . lang . illegalaccessexception:类事件。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个答案

岑俊明
2023-03-14

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

 类似资料:
  • private private修饰符是我们使用的最限制的修饰符。它表示它只能被自己所在的文件可见。所以如果我们给一个类声明为private,我们就不能在定义这个类之外的文件中使用它。 另一方面,如果我们在一个类里面使用了private修饰符,那访问权限就被限制在这个类里面了。甚至是继承这个类的子类也不能使用它。 所以一等公民,类、对象、接口……(也就是包成员)如果被定义为private,那么它们只

  • 主要内容:VB.Net修饰符列表修饰符是添加了任何编程元素的关键字,以特别强调编程元素在程序中的行为或将被访问 例如,访问修饰符:, , , , 等指示编程元素的访问级别,如:变量,常量,枚举或类。 VB.Net修饰符列表 下表提供了VB.Net修饰符的完整列表: 编号 修饰符 描述 1 指定Visual Basic应将所有字符串封送到美国国家标准学会(ANSI)值,而不管正在声明的外部过程的名称如何。 2 指定源文件开始处的属

  • .lazy 在默认情况下,v-model在每次input事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加lazy修饰符,从而转变为使用change事件进行同步: <!-- 在“change”时而非“input”时更新 --> <input v-model.lazy="msg" > .number 如果想自动将用户的输入值转为数值类型,可以给v-model添加num

  • 修饰符是添加了任何编程元素的关键字,以特别强调编程元素在程序中的行为或将被访问的方式。 例如,访问修饰符:Public,Private,Protected,Friend,Protected Friend等,表示编程元素的访问级别,如变量,常量,枚举或类。 VB.Net中的可用修饰符列表 下表提供了VB.Net修饰符的完整列表 - Sr.No 修改 描述 1 Ansi 指定Visual Basic应

  • 主要内容:final 修饰变量,final修饰方法,final修饰类,final 修饰符使用总结final 在 Java 中的意思是最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的,都表示不可改变,类似 C# 里的 sealed 关键字。 使用 final 关键字声明类、变量和方法需要注意以下几点: final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量。 final 用在方法的前面表示方法不可以

  • 主要内容:私有(Private)成员,实例,保护(Protected)成员,实例,公共(Public)成员,实例,作用域保护,实例Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。 Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带