Otimização do código do JAVAFX

Olá, eu estou fazendo um código aqui, mas na parte de mover arquivos, o aplicativo simplesmente para de responder e não faz mais nada.

Código:

void btnboost(ActionEvent event) throws IOException, InterruptedException, URISyntaxException {
	Main.visivel(btnboost, false); Main.visivel(btnhelp, false); etapa.setVisible(true);
	progresso.setStyle("-fx-accent: #3B99FC;");
		etapa.setText("FPS Booster v3.0");
		porcentagem(0.2);
		Alert continuar = new Alert(AlertType.INFORMATION);
		ProcessBuilder restore_point = new ProcessBuilder("cmd.exe", "/c", "Wmic.exe /Namespace:\\\\\\\\root\\\\default Path SystemRestore Call CreateRestorePoint \"%DATE% FPS BOOSTER V3\", 100, 12"); restore_point.redirectErrorStream(true); Process restore_point_p = restore_point.start(); restore_point_p.waitFor(); restore_point_p.destroy();
		continuar.setTitle("@illx_s");
		continuar.setHeaderText("FPS Booster v3.0");
		continuar.setContentText("Clique em OK para continuar.");
		continuar.showAndWait();
		Process executar;
		executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/+FPS.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/Booster.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/ControlarCache.reg")});  executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/FPS.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/FPSBOOSTER.reg")});  executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/GPUBoost.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/Miniboost.reg")});executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/OldPhotoViewer.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/XanderBaatzTweaks.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/XhekerFPS.reg")});executar.waitFor(); 
		porcentagem(0.4);
		continuar = new Alert(AlertType.INFORMATION);
	    executar = Runtime.getRuntime().exec(utf8("../arquivos/apps/advanced-systemcare-setup.exe"));
	    executar.waitFor();
	    porcentagem(0.6);
		continuar.setTitle("@illx_s");
		continuar.setHeaderText("FPS Booster v3.0");
		continuar.setContentText("Clique em OK para continuar com a instalação.");
		continuar.showAndWait();
	    ProcessBuilder forge = new ProcessBuilder("cmd.exe", "/c", "cd "+utf8("../arquivos/apps")+" && java -jar Forge.jar");forge.redirectErrorStream(true);Process forge_p = forge.start();
	    forge_p.waitFor();
	    forge_p.destroy();
	    executar.destroy();
	    porcentagem(0.8);

            // COMEÇA A PARAR DE RESPONDER AQUI
	    Path source = Paths.get(utf8("../arquivos/FPS.Booster.V3.0"));
	    Path destino = Paths.get((Tela1_Controller.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath());
	    Files.copy(source, destino);
	    Files.copy(Paths.get(utf8("../arquivos/config/options.txt")), Paths.get(System.getenv("APPDATA")+"/.minecraft"));
	    Files.copy(Paths.get(utf8("../arquivos/config/optionsof.txt")), Paths.get(System.getenv("APPDATA")+"/.minecraft"));
	    Files.copy(Paths.get(utf8("../arquivos/virtual/d3d8.dll")), Paths.get(System.getenv("APPDATA")+"/.minecraft"));
	    Files.copy(Paths.get(utf8("../arquivos/virtual/d3d9.dll")), Paths.get(System.getenv("APPDATA")+"/.minecraft"));
	    Files.copy(Paths.get(utf8("../arquivos/virtual/SwiftShader.ini")), Paths.get(System.getenv("APPDATA")+"/.minecraft"));
	    Files.copy(Paths.get(utf8("../arquivos/mods/1.8.9")), Paths.get(System.getenv("APPDATA")+"/.minecraft/mods"));
	    Thread.sleep(1);
	    porcentagem(1.0);
	    executar = Runtime.getRuntime().exec(new String[]{"powershell", "/c", "../arquivos/regs/powershell/block-telemetry.ps1"});
	    Thread.sleep(10);
	    continuar.setContentText("Abra a pasta FPS Booster V3.0 para concluir a instalação.");
	    continuar.showAndWait();
	    System.exit(0);
}

Aliás, eu tenho interesse em otimizar esse código para não ficar com tanto lag em PCs mais fracos, alguém consegue me ajudar? Se sim, muito obrigado. ^^

1 curtida

De uma olhada em Thread e Task e também por Platform.runLater()

Assim, o processamento será liberado.

Dessa forma que você escreveu seu codigo, irá prender o processamento em javaFX, Swing, ou em outra linguagem qualquer.

1 curtida

Edit: Já achei sites sobre os 3, em inglês e português.
Se eu tiver qualquer dúvida eu posto aqui.

Aí, maninho. Eu já entendi bem sobre Threads, Tasks e o Plataform.runLater(), mas eu queria saber: Como faço pra fazer o ponto de restauração ser criado e depois ele aplicar os regs?

		//Parte 1. Criação do ponto de restauração
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					ProcessBuilder restore_point = new ProcessBuilder("cmd.exe", "/c", "Wmic.exe /Namespace:\\\\\\\\root\\\\default Path SystemRestore Call CreateRestorePoint \"%DATE% FPS BOOSTER V3\", 100, 12"); 
					restore_point.redirectErrorStream(true); Process restore_point_p;
					restore_point_p = restore_point.start();
					restore_point_p.waitFor();
					restore_point_p.destroy();
					System.out.println("Criado um ponto de restauração.");
					Thread.sleep(100);
				} catch (IOException | InterruptedException e) {
				e.printStackTrace();
				} 
				
			}
		}).start();
		
		
		//Parte 2. Execução dos regedits.
		porcentagem(0.4);
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				Platform.runLater(new Runnable() {
					
					@Override
					public void run() {
						try {
							Process executar; executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/+FPS.reg")});executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/Booster.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/ControlarCache.reg")});  executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/FPS.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/FPSBOOSTER.reg")});  executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/GPUBoost.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/Miniboost.reg")});executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/OldPhotoViewer.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/XanderBaatzTweaks.reg")}); executar = Runtime.getRuntime().exec(new String[]{"regedit", "/s", utf8("../arquivos/regs/XhekerFPS.reg")});
							Thread.sleep(100);
							System.out.println("Aplicação dos regs concluída.");
						} catch (IOException | InterruptedException e) {
							e.printStackTrace();
						}  

						
					}
				});
			}
		}).start();

E obrigado por já me ajudar em relação a otimização do código ^^