refactored and explicitly perform a System.exit on AppLauncher shutdown
in case there are non-daemon threads still running they will be
terminated