public void run()
	{
		mainFrame.lock(true);
		final String osMinecraftName = profile.getOs().getMinecraftName();
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "Debug infos :");
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "OS : " + profile.getOs().getName());
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "Architecture : " + profile.getArch());
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "Java version : " + System.getProperty("java.version"));
		//
		final File gameDirectory = Main.system.getMinewildDirectory();
		final File assetsDirectory = new File(gameDirectory.getPath() + Constants.ASSETS_SUFFIX);
		final File versionsDirectory = new File(gameDirectory.getPath() + Constants.VERSIONS_SUFFIX);
		final File librariesDirectory = new File(gameDirectory.getPath() + Constants.LIBS_SUFFIX);
		final File nativesDir = new File(versionsDirectory.getPath() + Constants.NATIVES_SUFFIX);
		final File gameFile = new File(versionsDirectory.getPath() + File.separator + profile.getVersion() + File.separator + profile.getVersion() + ".jar");
		//
		//check pswd
		if(profile.getPassword() != null)//if premium
		{
			mainFrame.btnPlaySetText("Vérification du mot de passe ...");
		}
		//check whitelist
		if(!profile.isWhiteListed() && ConnectionUtils.getServerStatus())
			mainFrame.dispFiveSecMessageOnPlayButton("Vous n'êtes pas whitelisté sur Minewild");
		LastLoginSaveManager.saveContents(profile.getUsername(), profile.getPassword()!=null);
		mainFrame.btnPlaySetText("Vérification des fichiers de jeu ...");
		//TODO: il faudrait s'assurer que tous les fichiers de jeux soient téléchargées pour pouvoir passer à la suite
		//boucle qui dl les games files
		//verifier que la version requise existe (dossier + fichiers)
		mainFrame.btnPlaySetText("Lancement du jeu" + (profile.isWhiteListed() ? "" : " en solo") + " ...");
		final Gson gson = new Gson();
		MinecraftVersionJsonObject versionObj = null;
		try
		{
			versionObj = gson.fromJson(Utils.getFileContent(new File(versionsDirectory.getPath() + File.separator + profile.getVersion() + File.separator + profile.getVersion() + ".json"), null), MinecraftVersionJsonObject.class);
		}
		catch(JsonSyntaxException | IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		List<String> libraries = new ArrayList<String>();
		for(Library lib : versionObj.libraries)
		{
			libraries.add(lib.toString());
		}
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "Done.");
		final String pathSeparator = System.getProperty("path.separator");
		final List<String> command = new ArrayList<String>();
		command.add(Utils.getJavaDir());
		command.add("-Djava.library.path=" + nativesDir.getAbsolutePath());
		command.add("-cp");
		command.add(StringUtils.join(libraries, pathSeparator) + pathSeparator + gameFile.getAbsolutePath());
		command.add(versionObj.mainClass);
		command.addAll(ArgumentsManager.getMinecraftArgs(profile, versionObj.assets, gameDirectory, assetsDirectory));
		LogUtils.log(Level.INFO, "Executing command: " + StringUtils.join(command, ' '));
		try
		{
			final Process process = new ProcessBuilder(command.toArray(new String[command.size()])).directory(gameDirectory).start();
		}
		catch(IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		LogUtils.log(Level.INFO, Constants.PLAY_TASK_PREFIX + "Done.");
		mainFrame.setVisible(false);//TODO waring
	}