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(); }