code: @Override
      public final void stop() throws CoreException {
          try {
              LOGGER.log(STOP_APPLICATION, this.getClass().getSimpleName());
              preStop();
              super.stop();
  
              // Hide the stage is this method wasn't call by user
              if (stage().isShowing()) {
                  stage().hide();
              }
  
              // Now nothing is visible by users, Let's kill and release all JRebirth folks
              // without loosing or corrupting something
  
              // Be Careful done into the JAT
              // Should create a progress bar to control the closure process
  
              // Flag used to have 2 different waiting times
              boolean firstTime = true;
              do {
                  // Try to stop the JRebirth Thread
                  JRebirthThread.getThread().close();
  
                  // Wait parameterized delay before retrying to close if the thread is still alive
                  Thread.sleep(firstTime ? CoreParameters.CLOSE_RETRY_DELAY_FIRST.get() : CoreParameters.CLOSE_RETRY_DELAY_OTHER.get());
  
                  if (firstTime) {
                      firstTime = false;
                  }
              } while (JRebirthThread.getThread().isAlive());
  
              postStop();
              LOGGER.log(STOPPED_SUCCESSFULLY, this.getClass().getSimpleName());
  
          } catch (final Exception e) { // NOSONAR Catch all exception during stopping phase
              LOGGER.error(STOP_ERROR, e, this.getClass().getSimpleName(), e);
              throw new CoreException(e);
          }
      }
docs: {@inheritDoc}