2012-12-09 65 views
0

我使用基於這個問題的建議的事件系統:Create Custom Event in Java修改麻煩

我實現了它在處理組件和組件上的一個按鈕直通的事件。我把組件放入它自己的jar文件中。然後我用在另一個項目的組件和jar文件,當我試圖運行我曾與它創建的程序,它給了我下面的錯誤:

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

這是事件處理程序類,我寫的代碼:

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<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對這些事情有一些預定義的系統。