/** Called via reflection */ @SuppressWarnings({"UnusedDeclaration", "HardCodedStringLiteral"}) protected static void start( final String mainClass, final String methodName, final String[] args) { startupStart = System.nanoTime(); Main.setFlags(args); if (!Main.isHeadless()) { UIUtil.initDefaultLAF(); } ThreadGroup threadGroup = new ThreadGroup("Idea Thread Group") { @Override public void uncaughtException(Thread t, Throwable e) { processException(e); } }; Runnable runnable = new Runnable() { @Override public void run() { try { ClassUtilCore.clearJarURLCache(); Class<?> aClass = Class.forName(mainClass); Method method = aClass.getDeclaredMethod(methodName, ArrayUtil.EMPTY_STRING_ARRAY.getClass()); method.setAccessible(true); Object[] argsArray = {args}; method.invoke(null, argsArray); } catch (Throwable t) { throw new StartupAbortedException(t); } } }; new Thread(threadGroup, runnable, "Idea Main Thread").start(); }