@Override
            public void run() {
                for (Class<?> clazz : appClass) {
                    try {
                        if (LegacyApplication.class.isAssignableFrom(clazz)) {
                            Object app = clazz.getDeclaredConstructor().newInstance();
                            if (app instanceof SimpleApplication) {
                                final Method settingMethod = clazz.getMethod(
                                    "setShowSettings",
                                    boolean.class
                                );
                                settingMethod.invoke(app, showSetting);
                            }
                            final Method mainMethod = clazz.getMethod("start");
                            mainMethod.invoke(app);
                            Field contextField = LegacyApplication.class.getDeclaredField("context");
                            contextField.setAccessible(true);
                            JmeContext context = null;
                            while (context == null) {
                                context = (JmeContext) contextField.get(app);
                                Thread.sleep(100);
                            }
                            while (!context.isCreated()) {
                                Thread.sleep(100);
                            }
                            while (context.isCreated()) {
                                Thread.sleep(100);
                            }
                        } else {
                            final Method mainMethod = clazz.getMethod("main", (new String[0]).getClass());
                            mainMethod.invoke(clazz, new Object[] { new String[0] });
                        }
                        // wait for destroy
                        System.gc();
                    } catch (IllegalAccessException ex) {
                        logger.log(Level.SEVERE, "Cannot access constructor: " + clazz.getName(), ex);
                    } catch (IllegalArgumentException ex) {
                        logger.log(Level.SEVERE, "main() had illegal argument: " + clazz.getName(), ex);
                    } catch (InvocationTargetException ex) {
                        logger.log(Level.SEVERE, "main() method had exception: " + clazz.getName(), ex);
                    } catch (InstantiationException ex) {
                        logger.log(Level.SEVERE, "Failed to create app: " + clazz.getName(), ex);
                    } catch (NoSuchMethodException ex) {
                        logger.log(
                            Level.SEVERE,
                            "Test class doesn't have main method: " + clazz.getName(),
                            ex
                        );
                    } catch (Exception ex) {
                        logger.log(Level.SEVERE, "Cannot start test: " + clazz.getName(), ex);
                        ex.printStackTrace();
                    }
                }
            }
@return FileFilter for searching class files (no inner classes, only
        those with "Test" in the name)
jme3-examples/src/main/java/jme3test/TestChooser.java