If you've written the game, then this really ought to be easy, although your code will need a restructure.
You need to split your initialisation code into two halves.
1) Stuff that only needs to be initialised once
2) Stuff that needs to be reset every game.
You can leave 1) in the constructor of the classes & put 2) in a separate method, e.g. public void reset(). You can put a call into reset() at the end of the constructor if needs be.
If a class contains references of other classes (e.g. if you have a Car class which contains references to four Wheel classes), you need to make sure that your (Car) reset() method calls the reset() method on those other (Wheel) classes. That way when you call reset() on the top level class, all the others get reset too.
If the Menu system is AWT or Swing and needs to be hidden when playing the game and then recreated, you can add member functions to your main class to do the job & call them from your game loop. You will also need to call CreateMenu from the constructor
Now you can structure your main loop long the lines of:
1 2 3 4 5 6 7 8 9 10
| public void playGameOnce() { destroyMenu(); reset(); while (!gameOver) { movement(); ai(); render(); } createMenu(); } |