Well, what you are doing essentially is attempting to add the same instance of a JMenuItem to a component, which won't work since it sees that the JMenuItem instance already exists within it. A component cannot contain more than one of the exact same instances of another component. This is not just a JMenu issue; this is true for all components.
public class Test
public static void main(String args)
JPanel panel = new JPanel();
JButton newBtn = new JButton("Test");
System.out.println("# of Buttons: " + panel.getComponentCount());
If you run the above, you'll get an answer of 1.
What you can do is clone the menu item. You'll have to create your own clone function (since I don't believe the clone() method has been implemented for JMenuItem).
So you may have to do something like:
private static JMenuItem cloneMenuItem(JMenuItem mi)
JMenuItem newMi = new JMenuItem(mi.getText());
You would expand this clone function to do "sets" on the new menu item and populate the set methods with "gets" from the passed in menu item.
The calling of this function may look like this:
JMenuItem item = new JMenuItem("Item");
Something to think about is that container components like JMenu provide methods to access the components contained within them just by referencing their instances. This would not be possible if the container components allowed multiple duplicate instances within them. Looping through their components to do stuff like updates and paints would become heavily convoluted with multiple duplicate instances.