Because ActionPerformed() is from base class and calls ActionPerformed(Action.WindowMessage) which is our overwritted ActionPerformed(Action action). Maybe if window message is need to be send the ActionListener.ActionPerformed(Action.WindowMessage) should be explicitly called here, I think I just missed that possibility when fixed the infinite recursion. Thanks.