protected void destroy(final JFrame frame, final GLJPanel glJPanel) {
   try {
     if (SwingUtilities.isEventDispatchThread()) {
       if (null != frame) {
         frame.setVisible(false);
         if (null != glJPanel) {
           frame.getContentPane().remove(glJPanel);
         }
         frame.remove(glJPanel);
       }
       if (null != glJPanel) {
         glJPanel.destroy();
       }
       if (null != frame) {
         frame.dispose();
       }
     } else {
       SwingUtilities.invokeAndWait(
           new Runnable() {
             public void run() {
               if (null != frame) {
                 frame.setVisible(false);
                 if (null != glJPanel) {
                   frame.getContentPane().remove(glJPanel);
                 }
                 frame.remove(glJPanel);
               }
               if (null != glJPanel) {
                 glJPanel.destroy();
               }
               if (null != frame) {
                 frame.dispose();
               }
             }
           });
     }
   } catch (final Exception e) {
     e.printStackTrace();
   }
 }