Che però non è affatto "banale", come leggerai sotto tra poco ...
Ovviamente non restano ... se non fai tu qualcosa di esplicito in tal senso!
Se è l'utente che può creare nuove voci di menù, allora queste sono delle "configurazioni" (impostazioni, settaggi .. chiamali come vuoi) dell'utente e come tali andrebbero quindi salvate da qualche parte in maniera persistente, in modo che al prossimo avvio della applicazione vengano lette ed applicate. Concettualmente come fanno tanti software dotati di "configurazioni/preferenze" che sicuramente conosci e/o usi.
Ma ci sono alcuni aspetti da considerare. Il primo e più critico: NON basta nel tuo caso creare un nuovo JMenuItem con un nome scelto dall'utente. Questo lo hai fatto basilarmente con la riga:
menu.add(new JMenuItem(a),0);
Non basta perché su quel nuovo JMenuItem ci devi anche registrare un listener! In modo che alla azione della voce venga eseguito "qualcosa". Quindi un punto importante da capire/stabilire (e non l'hai spiegato): COSA devono fare le voci di menù create dall'utente?
Il secondo punto è appunto come rendere "persistenti" queste configurazioni. Tecnicamente/teoricamente sarebbe possibile usare la serializzazione degli oggetti per salvare su uno stream (file) direttamente gli oggetti JMenuItem. Ma ti dico subito: NON farlo.
Dovresti "modellare" bene le informazioni che servono per avere una configurazione "logica" di ciascuna voce. Sicuramente un String con il testo e poi ... "altro" ma devi innanzitutto rispondere alla domanda di prima.
E tutto questo ti assicuro che non è una cosa "stupida" (nel senso di "banale"). Anzi, se finora hai fatto X, allora per realizzare un sistema di configurazione dei menù "dinamico" gestito dall'utente dovrai studiare/impegnarti almeno un 30X.![]()