private void asyncButtonHandler(ActionEvent event) {

    this.asyncButton.setDisable(true);
    this.asyncLabel.setText(
        String.format("started at %s", LocalTime.now().format(JavaFXClass.TIME_FORMATTER)));

    new Thread(
            () -> {
              Future<LocalTime> task = this.asyncExecutor.submit(this::asyncTask);

              try {
                LocalTime finished = task.get(JavaFXClass.ASYNC_SECONDS_ABORT, TimeUnit.SECONDS);

                Platform.runLater(
                    () -> {
                      this.asyncLabel.setText(
                          String.format(
                              "finished at %s", finished.format(JavaFXClass.TIME_FORMATTER)));
                      this.asyncButton.setDisable(false);
                    });

              } catch (TimeoutException ex) {
                Platform.runLater(
                    () -> {
                      this.asyncLabel.setText(
                          String.format("aborted after %ss", JavaFXClass.ASYNC_SECONDS_ABORT));
                      this.asyncButton.setDisable(false);
                    });

              } catch (ExecutionException | InterruptedException ex) {
                ex.printStackTrace();
              }
            })
        .start();
  }