Make Application close properly

If exception while closing there is a proper log
This commit is contained in:
Andrin Fassbind 2022-05-13 15:35:41 +02:00
parent 20903f6a69
commit bdb34fde31
3 changed files with 23 additions and 5 deletions

View File

@ -8,6 +8,7 @@ import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class TournamentDecorator implements IsObservable{
private Tournament tournament;
@ -175,6 +176,11 @@ public class TournamentDecorator implements IsObservable{
}
}
public void closeApplication() throws InterruptedException {
executorService.shutdown();
executorService.awaitTermination(2000, TimeUnit.MILLISECONDS);
}
private class saveTask implements Runnable {
@Override

View File

@ -5,28 +5,31 @@ import ch.zhaw.projekt2.turnierverwaltung.FactoryDecorator;
import ch.zhaw.projekt2.turnierverwaltung.FileIO;
import ch.zhaw.projekt2.turnierverwaltung.TournamentDecorator;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.util.logging.Logger;
public class MainWindow extends Application {
private FileIO fileIO = new FileIO(System.getProperty("user.dir") + System.getProperty("file.separator") + "tournierverwaltung_angrynerds");
private FactoryDecorator factoryDecorator;
private TournamentDecorator tournamentDecorator = new TournamentDecorator(fileIO);
private Factory factory = new Factory(fileIO, tournamentDecorator); //TODO make it private!
private Factory factory = new Factory(fileIO, tournamentDecorator);
private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane pane = factory.loadMainWindow();
factoryDecorator = new FactoryDecorator(fileIO, factory, pane);
factory.loadAllViews(factoryDecorator, pane);
tournamentDecorator.setFactoryDecorator(factoryDecorator);
factoryDecorator.openTournamentList();
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.setMaximized(true);
@ -35,5 +38,13 @@ public class MainWindow extends Application {
primaryStage.show();
}
@Override
public void stop() {
try {
super.stop();
tournamentDecorator.closeApplication();
} catch (Exception e) {
logger.warning("Exception while closing application");
}
}
}

View File

@ -1,6 +1,7 @@
package ch.zhaw.projekt2.turnierverwaltung.main;
import ch.zhaw.projekt2.turnierverwaltung.FXController;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
@ -13,7 +14,7 @@ public class MainWindowController extends FXController {
@FXML
void closeApplication(ActionEvent event) {
Platform.exit();
}
@Override