/** Función encargada de mostrar que se va a actualizar */ public void updateApp() { // Temporizador para mostrar el mensaje de inicio de la aplicación. Task wait = new Task<Boolean>() { @Override protected Boolean call() throws Exception { updateMessage(" . . . L O A D I N G . . . "); Thread.sleep(LONG_WAIT_IN_MILLIS); return null; } }; // Hacemos que la tarea pueda manejar el texto de la barra de estado del splash status.textProperty().bind(wait.messageProperty()); // Animación barra de estado. progressBar.setProgress(ProgressBar.INDETERMINATE_PROGRESS); // Cuando termine la espera llamamos a la función para revisar si existen actualizaciones. wait.setOnSucceeded(event -> checkforupdates()); // Creamos e iniciamos un hilo. new Thread(wait).start(); }
private void showSplash( final Stage initStage, Task<?> task, InitCompletionHandler initCompletionHandler) { progressText.textProperty().bind(task.messageProperty()); loadProgress.progressProperty().bind(task.progressProperty()); task.stateProperty() .addListener( (observableValue, oldState, newState) -> { if (newState == Worker.State.SUCCEEDED) { loadProgress.progressProperty().unbind(); loadProgress.setProgress(1); initStage.toFront(); FadeTransition fadeSplash = new FadeTransition(Duration.seconds(1.2), splashLayout); fadeSplash.setFromValue(1.0); fadeSplash.setToValue(0.0); fadeSplash.setOnFinished(actionEvent -> initStage.hide()); fadeSplash.play(); initCompletionHandler.complete(); } // todo add code to gracefully handle other task states. }); Scene splashScene = new Scene(splashLayout); initStage.initStyle(StageStyle.UNDECORATED); final Rectangle2D bounds = Screen.getPrimary().getBounds(); initStage.setScene(splashScene); initStage.setX(bounds.getMinX() + bounds.getWidth() / 2 - SPLASH_WIDTH / 2); initStage.setY(bounds.getMinY() + bounds.getHeight() / 2 - SPLASH_HEIGHT / 2); initStage.show(); }
public static void showTaskProgressDialog( Window ownerWindow, Task task, boolean showTaskMessage) { final Stage dialog = new Stage(); task.setOnSucceeded(event -> dialog.close()); task.setOnCancelled(event -> dialog.close()); dialog.initStyle(StageStyle.UTILITY); dialog.initModality(Modality.APPLICATION_MODAL); dialog.initOwner(ownerWindow); dialog.titleProperty().bind(task.titleProperty()); // dialog.setTitle(ResourceManager.getMessage("title.dialog.processing")); dialog.setOnCloseRequest( event -> Logger.getLogger(Dialogs.class) .info(ResourceManager.getMessage("notification.task.terminatedByUser"))); ProgressBar progressBar = new ProgressBar(0); progressBar.progressProperty().bind(task.progressProperty()); progressBar.setMaxWidth(Double.MAX_VALUE); progressBar.getStyleClass().add("dark"); Label label = new Label(ResourceManager.getMessage("label.pleaseWaitWhile")); Label taskMessage = new Label(); taskMessage.textProperty().bind(task.messageProperty()); Button cancelButton = new Button(ResourceManager.getMessage("label.button.cancel")); cancelButton.setOnAction( event -> { task.cancel(); Logger.getLogger(Dialogs.class) .info(ResourceManager.getMessage("notification.task.terminatedByUser")); }); ButtonBar buttonBar = new ButtonBar(); buttonBar.getButtons().add(cancelButton); VBox dialogVBox = new VBox(); dialogVBox.setFillWidth(true); dialogVBox.setSpacing(5); dialogVBox.setPadding(new Insets(5)); dialogVBox.setPrefSize(300, VBox.USE_COMPUTED_SIZE); dialogVBox.getChildren().add(label); if (showTaskMessage) { dialogVBox.getChildren().add(taskMessage); } dialogVBox.getChildren().add(progressBar); dialogVBox.getChildren().add(buttonBar); Scene dialogScene = new Scene(dialogVBox); dialogScene.getStylesheets().add(ResourceManager.getUIThemeStyle()); dialog.setScene(dialogScene); dialog.setResizable(false); dialog.show(); }
private void bindTaskToControl(ServiceAndTask demoControl, Task<String> task) { demoControl.startTask.setOnMouseClicked((val) -> new Thread(task).start()); demoControl.labelTask.textProperty().bind(task.messageProperty()); task.addEventHandler( WorkerStateEvent.WORKER_STATE_SUCCEEDED, (val) -> { try { demoControl.labelTask.textProperty().unbind(); demoControl.labelTask.setText(task.get()); demoControl.startTask.setDisable(true); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }); demoControl.progressTask.progressProperty().bind(task.progressProperty()); }
/** Función encargada de descargar la actualización */ private void downloadupdate() { // El usuario aceptó la actualización entonces se le pide seleccione un directirio para guardar final File file = new DirectoryChooser().showDialog(splashStage); // Creamos el archivo para escribir. final File filetowrite = new File(file.getAbsolutePath() + "/" + FILE_NAME); // Eliminamos los botones de control. splashLayout.getChildren().remove(updateLayout); // Animamos la barra de progreso. progressBar.setProgress(ProgressBar.INDETERMINATE_PROGRESS); // Tarea encargada de realizar la descarga. Task download = new Task() { @Override protected Object call() throws Exception { updateMessage(". . . D O W N L O A D I N G . . "); // Creamos el objeto que contendrá el enlace. URL source = new URL(checkupdates.get()); if (source != null) { // Copiamos el arhcivo del enlace. Files.copy( source.openStream(), filetowrite.toPath(), StandardCopyOption.REPLACE_EXISTING); updateMessage(" READY "); Thread.sleep(SHORT_WAIT_MILLIS); } else { cancel(); } return null; } }; // Permitimos que la tarea maneje el texto del splash status.textProperty().bind(download.messageProperty()); // Si se ha terminado la descarga. download.setOnSucceeded( event -> { // Tarea encargada de mostrar que se a terminado la descarga. Task timer = new Task() { @Override protected Object call() throws Exception { updateMessage("PLEASE START THE NEW VERSION"); Thread.sleep(SHORT_WAIT_MILLIS); return null; } }; // Permitimos que la tarea maneje el texto del splash status.textProperty().bind(timer.messageProperty()); // cuando termine la tarea cerramos la aplicación. timer.setOnSucceeded(event1 -> System.exit(0)); // Mostramos animación de la barra de progreso. showFinishProgress(timer); }); // Si ha fallado la descarga. download.setOnFailed( event -> { // Tarea encargada de mostrar que ha fallado la descarga. Task timer = new Task() { @Override protected Object call() throws Exception { updateMessage("Descarga Fallida"); Thread.sleep(SHORT_WAIT_MILLIS); return null; } }; // Permitimos que la tarea maneje el texto del splash status.textProperty().bind(timer.messageProperty()); timer.setOnSucceeded( event1 -> { splashStage.close(); isready.set(true); }); // Mostramos animación de la barra de progreso. showFinishProgress(timer); }); // Creamos el hilo y lo iniciamos. new Thread(download).start(); }
/** Función encargada de revisar si existen actualizaciones. */ private void checkforupdates() { /** * Esta Función descarga un archivo txt que contiene la información y enlace de descarga de las * distintas versiones de la aplicación, compara la versión del programa y si encuentra una * versión mas reciente en el archivo manda llamar a la función de descarga. */ // Tarea encargada de revisar si hay actualización. checkupdates = new Task<String>() { @Override protected String call() throws Exception { // Avisamos al usuario que se van a revisar las actualziaciones. updateMessage("CHECKING FOR UPDATES"); Thread.sleep(500); // Creamos una dirección para el archivo de texto. URL updatefile = new URL(UPDATE_TXT); // Si existe el archivo de texto. if (updatefile != null) { // Creamos un lector. BufferedReader in = new BufferedReader(new InputStreamReader(updatefile.openStream())); // Buffer. String str; // Para cada linea. while ((str = in.readLine()) != null) { // Partimos cada linea "repositorio; version; URL" notese que el separador es "; " String[] buf = str.split("; "); // Si la versión es mayor y el repositorio corresponde entonces preguntamos si se // desea descargar. if ((Double.parseDouble(buf[1]) > VERSION) && (buf[0].equalsIgnoreCase(REPOSITORY))) { updateMessage( " A NEW VERSION OF TRUDISP IS AVAILABLE\n V_: " + buf[1] + "\n DOWNLOAD?"); isupdating = true; return buf[2]; } else { isupdating = false; } } } else // No se ha podido establecer conexión con el archivo de texto. { updateMessage("CONNECTION ERROR"); Thread.sleep(SHORT_WAIT_MILLIS); isupdating = false; cancel(); } return null; } }; // Permitimos que la tarea maneje los mensajes de la barra de estado. status.textProperty().bind(checkupdates.messageProperty()); // Si se ha terminado la tarea checkupdates.setOnSucceeded( event -> { if (isupdating) { // Agregamos los botones de control. splashLayout.getChildren().add(updateLayout); splashStage.sizeToScene(); progressBar.setProgress(0); } else { // Cerramos el splash y avisamos que se ha terminado. splashStage.close(); isready.set(true); } }); // Si ha fallado latarea. checkupdates.setOnFailed( event -> { splashStage.close(); isready.set(true); }); // Creamos e iniciamos el hilo. new Thread(checkupdates).start(); }
public TaskProgressIndicator(Task<?> task) { this(); label.textProperty().bind(task.messageProperty()); progress.progressProperty().bind(task.progressProperty()); }