2012-12-09 3 views
0

Я использую систему событий на основе предложений в этом вопросе: Create Custom Event in JavaМодификатор неприятность

Я реализовал его в качестве компонента для обработки и PASSTHROUGH события с помощью кнопки на компоненте. Я поместил компонент в свой собственный файл jar. Тогда я использовал файл компонента и банки в другом проекте, и когда я попытался запустить программу, которую я создал с ним, он дал мне следующую ошибку:

java.lang.IllegalAccessException: Class Eventing.EventHandler can not access a member of class outfit.proto.frmDo$1 with modifiers "public"

Это код класса 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() { 

     } 
    }); 
+0

Вы должны включить код в свой вопрос. –

ответ

0

Основано на this запись в википедии на шаблонах наблюдателей. Я получил систему событий для работы! Поскольку я подозревал, что у Java есть определенная система для такого рода вещей.

Смежные вопросы