title: How to restart a JFrame when creating a multiple level game?
body: <p>I have a one level computer game that I created , and I want to add another level . </p>
  
  <p>Here is the Main : </p>
  
  <pre><code>public class Main extends JDialog
  {   
  
      private static final long serialVersionUID = 1L;
      protected static TimerThread timerThread;
      static JStatusBar statusBar = new JStatusBar();
      private static JFrame frame;
      private static final int FRAME_LOCATION_X = 300;
      private static final int FRAME_LOCATION_Y = 50;
      private static final int FRAME_SIZE_X = 850; // animator's target frames per second
      private static final int FRAME_SIZE_Y = 700; // animator's target frames per second
      private static final String WorldName = "FPS 2013 CG Project";
      private static final String HARD_TARGET = "src/res/target.jpg";
      private static final String runningOut = "Time is running out - you have : ";
  
      static int interval;
      static Timer timer1;
      static JLabel changingLabel1 = null;
  
  
      /**
       *  NEW
       */
  
      private static Timer timer;
      private static int count = 60;
  
      private static ActionListener timerAction = new ActionListener()
      {
          public void actionPerformed(ActionEvent ae)
          {
              count--;
              if (count == 0)
                  timer.stop();
              changingLabel1.setText(runningOut + count + " seconds"); 
          }
      };
  
  
      public static void exitProcedure() {
          timerThread.setRunning(false);
          System.exit(0);
      }
  
  
          /**
           * Clock timer1 
           * @author X2
           *
           */
          public static class TimerThread extends Thread 
          {
  
              protected boolean isRunning;
  
              protected JLabel dateLabel;
              protected JLabel timeLabel;
  
              protected SimpleDateFormat dateFormat = 
                      new SimpleDateFormat("EEE, d MMM yyyy");
              protected SimpleDateFormat timeFormat =
                      new SimpleDateFormat("h:mm a");
  
              public TimerThread(JLabel dateLabel, JLabel timeLabel) {
                  this.dateLabel = dateLabel;
                  this.timeLabel = timeLabel;
                  this.isRunning = true;
              }
  
              @Override
              public void run() {
                  while (isRunning) {
                      SwingUtilities.invokeLater(new Runnable() {
                          @Override
                          public void run() {
                              Calendar currentCalendar = Calendar.getInstance();
                              Date currentTime = currentCalendar.getTime();
                              dateLabel.setText(dateFormat.format(currentTime));
                              timeLabel.setText(timeFormat.format(currentTime));
                          }
                      });
  
                      try {
                          Thread.sleep(5000L);
                      } catch (InterruptedException e) {
                      }
                  }
              }
  
              public void setRunning(boolean isRunning) {
                  this.isRunning = isRunning;
              }
  
          }
  
  
  
  
      public static void main(String[] args) 
      {
  
             SwingUtilities.invokeLater(new Runnable() 
              {
                  @Override
                  public void run() 
                  {
  
                      frame = new JFrame(WorldName);
  
                      Container contentPane = frame.getContentPane();
                      contentPane.setLayout(new BorderLayout());
  
                      /**
                       *  the timer of the count-down
                       */
  
                      timer = new Timer(1000, timerAction);
                      timer.start();
  
                      changingLabel1 = new JLabel(runningOut);
                      statusBar.setLeftComponent(changingLabel1);
  
                      final JLabel dateLabel = new JLabel();
                      dateLabel.setHorizontalAlignment(JLabel.CENTER);
                      statusBar.addRightComponent(dateLabel);
  
                      final JLabel timeLabel = new JLabel();
                      timeLabel.setHorizontalAlignment(JLabel.CENTER);
                      statusBar.addRightComponent(timeLabel);
  
                      contentPane.add(statusBar, BorderLayout.SOUTH);
  
                      frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                      frame.addWindowListener(new WindowAdapter() {
                          @Override
                          public void windowClosing(WindowEvent event) {
                              exitProcedure();
                          }
                      });
  
                      timerThread = new TimerThread(dateLabel, timeLabel);
                      timerThread.start();
  
                      Renderer myCanvas = new Renderer();
                      final Animator animator = new Animator(myCanvas);
  
                      Toolkit t = Toolkit.getDefaultToolkit();
                      BufferedImage originalImage = null;
  
                      try 
                      {
                          originalImage = ImageIO.read(new File(HARD_TARGET));
                      } 
  
                      catch (Exception e1) {e1.printStackTrace();}
                      Cursor newCursor = t.createCustomCursor(originalImage, new Point(0, 0), "none"); 
  
                      frame.setCursor(newCursor);
                      frame.setLocation(FRAME_LOCATION_X, FRAME_LOCATION_Y);
                      frame.add(myCanvas);
                      frame.setSize(FRAME_SIZE_X, FRAME_SIZE_Y);
                      frame.addWindowListener(new WindowAdapter()
  
                      {
                          @Override
                          public void windowClosing(WindowEvent e) 
                          {
                              new Thread() 
                              {
                                   @Override
                                   public void run() 
                                   {
                                       animator.stop();
                                       System.exit(0);
                                   }
                              }.start();
                          }
                      });
  
                      frame.setVisible(true);
                      animator.start();
                      myCanvas.requestFocus();
                      myCanvas.setFocusable(true);
                  }
              });
      }
  }
  </code></pre>
  
  <p>This Main function uses the class Renderer , i.e. </p>
  
  <pre><code>class Renderer extends GLCanvas implements GLEventListener, KeyListener ,MouseListener ,MouseMotionListener {...}
  </code></pre>
  
  <p>And that class holds the first level of the game . </p>
  
  <p>As you can see I'm also using <code>JFrame</code> and <code>JOGL 1.0</code> . </p>
  
  <p>My question is : how can I reset the JFrame after I'm done with the 1st level ? Obviously I can't use <code>System.exit(0);</code>  , since it would quit the entire program . </p>
  
  <p>What I want is to move to another class that holds the 2nd level . </p>
  
  <p>How can I do that without exiting with <code>System.exit(0);</code> ? </p>
  
  <p>Thanks </p>