/**
   * Calling this function causes the selected application to launch.
   *
   * @return {@code true} in case launching the application was successful
   */
  @SuppressWarnings("nls")
  public boolean launch(
      @Nonnull final Collection<File> classpath, @Nonnull final String startupClass) {
    final String classPathString = buildClassPathString(classpath);

    Iterable<Path> executablePaths;
    if (OSDetection.isMacOSX()) {
      executablePaths = new MacOsXJavaExecutableIterable();
    } else {
      executablePaths = new JavaExecutableIterable();
    }

    for (Path executable : executablePaths) {
      if (isJavaExecutableWorking(executable)) {
        final List<String> callList = new ArrayList<>();
        callList.add(escapePath(executable.toString()));
        callList.add("-classpath");
        callList.add(classPathString);
        if (snapshot) {
          callList.add("-Dillarion.server=devserver");
        }
        callList.add(startupClass);
        printCallList(callList);
        if (launchCallList(callList)) {
          return true;
        } else {
          LOGGER.error("Error while launching application: {}" + errorData);
        }
      }
    }
    return false;
  }
 /**
  * This small utility function takes care for escaping a path. This operation is platform
  * dependent so the result will differ on different platforms.
  *
  * @param orgPath the original plain path
  * @return the escaped path
  */
 private static String escapePath(@Nonnull final String orgPath) {
   if (OSDetection.isWindows()) {
     if (orgPath.contains(" ")) {
       return '"' + orgPath + '"';
     }
     return orgPath;
   }
   return orgPath.replace(" ", "\\ ");
 }