package games.strategy.triplea.ui;
import java.awt.event.ActionEvent;
import java.lang.ref.WeakReference;
import javax.swing.AbstractAction;
import javax.swing.Action;
/**
* Avoid holding a strong reference to the action
* fixes a memory leak in swing.
*/
public class WeakAction extends AbstractAction {
private static final long serialVersionUID = 8931357243476123862L;
private final WeakReference<Action> delegate;
WeakAction(final String name, final Action delegate) {
super(name);
this.delegate = new WeakReference<>(delegate);
}
@Override
public void actionPerformed(final ActionEvent e) {
final Action a = delegate.get();
if (a != null) {
a.actionPerformed(e);
}
}
}