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() {
}
});
你應該在你的問題中包含一些代碼。 –