Все обработчики событий JavaFX выполняются в потоке приложений JavaFX, и эти обработчики должны быстро возвращаться, что не происходит с PowerShell
.Любая модификация GUI должна происходить в потоке приложения JavaFX.
Похоже, вы просто переместили неправильный код в фоновый поток.
Класс Task
может помочь в обработке завершения / исключения кода, выполняемого в фоновом потоке.
@FXML
private void NORMAL_MODE(){
LABEL.setText("123");
ICON.setVisible(true);
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
try (PowerShell powerShell = PowerShell.openSession()) {
PowerShellResponse response = powerShell.executeCommand("Set-Location “C:\\Windows\\Temp”");
response = powerShell.executeCommand("Remove-Item * -whatif -recurse -force");
System.out.println(response.getCommandOutput());
response = powerShell.executeCommand("Set-Location “C:\\Windows\\Prefetch”");
response = powerShell.executeCommand("Remove-Item * -whatif -recurse -force");
System.out.println(response.getCommandOutput());
response = powerShell.executeCommand("Set-Location “C:\\Documents and Settings”");
response = powerShell.executeCommand("Remove-Item * -whatif -recurse -force");
System.out.println(response.getCommandOutput());
response = powerShell.executeCommand("Set-Location $env:TEMP");
System.out.println(response.getCommandOutput());
response = powerShell.executeCommand("Remove-Item -whatif -Recurse -Force");
System.out.println(response.getCommandOutput());
}
return null;
}
};
task.setOnSucceeded(event -> {
// todo: update gui to indicate success
});
task.setOnFailed(event -> {
// todo: update gui to indicate an exception happened
});
new Thread(task).start();
}
Обработчики событий onSucceeded
и onFailed
выполняются в потоке приложения JavaFX, поэтому вам не нужноиспользуйте Platform.runLater
для модификации GUI, выполненного в этих обработчиках.