swingx-master/swingx-action/src/test/java/org/jdesktop/swingx/action/BoundActionIssues.java
package org.jdesktop.swingx.action;

//Click twice on "Refresh" button (it will refresh the tool bar twice)
//Click on one of the tool bar button (eg "ChoiceA")
//It will throw the exception

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar;

import org.jdesktop.swingx.action.ActionManager;
import org.jdesktop.swingx.action.BoundAction;

@SuppressWarnings("nls")
public class BoundActionIssues {

    public static void main(String[] args) {
        new BoundActionIssues().start();
    }

    ActionManager am = new ActionManager();
    ActionContainerFactory acf = new ActionContainerFactory(am);
    JToolBar bar = null;

    BoundActionIssues() {
        initActionManager();

        bar = acf.createToolBar(Arrays.asList(new String[] { "ba", "bb" }));
    }

    private void initActionManager() {
        BoundAction ba = new BoundAction("ChoiceA");
        BoundAction bb = new BoundAction("ChoiceB");
        ba.registerCallback(this, "test");
        bb.registerCallback(this, "test");
        ba.setStateAction();
        ba.setSelected(true);
        bb.setStateAction();
        String group = "agroup";

        ba.setGroup(group);
        bb.setGroup(group);

        am.addAction("ba", ba);
        am.addAction("bb", bb);
    }

    private void start() {
        JFrame f = createFrame();
        f.getContentPane().add(bar, "North");
        JButton brefresh = new JButton("Refresh");
        brefresh.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                refreshToolBar();
            }
        });
        f.getContentPane().add(brefresh, "South");
        f.setVisible(true);
    }

    private void refreshToolBar() {
        bar.removeAll();
        bar.add(acf.createButton(am.getAction("ba")));
        bar.add(acf.createButton(am.getAction("bb")));
    }

    private static JFrame createFrame() {
        JFrame f = new JFrame();
        f.setSize(400, 400);
        f.setLocationRelativeTo(null);
        return f;
    }
}
