Beispiel #1
0
  /** 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();
  }
Beispiel #2
0
  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());
  }
Beispiel #5
0
  /** 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();
  }
Beispiel #6
0
  /** 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());
 }