/**
   * Handles exceptions happened during MIDlet suite execution.
   *
   * @param t exception instance
   */
  public void handleException(Throwable t) {
    t.printStackTrace();
    int errorCode = getErrorCode(t);

    if (Logging.TRACE_ENABLED) {
      Logging.trace(t, "Exception caught in CdcMIDletSuiteLoader");
    }

    reportError(errorCode, t.getMessage());
  }
  /**
   * Called at the initial start of the VM. Initializes internal security and any other AMS classes
   * related classes before starting the MIDlet.
   *
   * @param args arg[0] the suite ID (-1=rommized MIDlet), arg[1] the class name of the MIDlet,
   *     arg[2-n] optional MIDlet args, the first labled arg-0, then second arg-1, etc
   */
  public static void main(String args[]) {
    try {
      CDCInit.init();

      CdcMIDletSuiteLoader loader = new CdcMIDletSuiteLoader();

      if (args.length < 1) {
        System.err.println("The suite ID for the " + "MIDlet suite was not given");
        throw new IllegalArgumentException("Suite ID absent");
      }

      try {
        loader.suiteId = Integer.parseInt(args[0]);
      } catch (Throwable t) {
        throw new IllegalArgumentException("Suite ID: " + t.getMessage());
      }

      if (args.length < 2) {
        System.err.println("The class name for the " + "MIDlet was not given");
        throw new IllegalArgumentException("MIDlet class name absent.");
      }

      loader.midletClassName = args[1];

      int numberOfSuiteArgs = args.length - 2;

      if (numberOfSuiteArgs > 0) {
        loader.args = new String[numberOfSuiteArgs];
        for (int i = 0; i < numberOfSuiteArgs; i++) {
          loader.args[i] = args[i + 2];
        }
      }

      loader.runMIDletSuite();
    } catch (Throwable t) {
      t.printStackTrace();
    }
  }