Mettre à jour la valeur d'une progress bar
Bonjour,
Je vous sollicite car j'ai un problème que je ne comprend absolument pas.
J'ai dans mon application javafx, une fonction qui me permet de télécharger un fichier sur un serveur ftp à l'aide d'une boucle. Et je souhaiterais afficher une progress bar permettant de visualiser l'avancement du téléchargement. J'ai donc créé une interface fxml avec son controller et j'appelle à chaque itération de la boucle de téléchargement une fonction devant modifier la valeur de la progress bar. Mais visuellement la barre ne change pas. Je ne comprend pas se qui se passe...
Classe téléchargement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(fichierlocal));
InputStream inputStream = ftpClient.retrieveFileStream(CheminFichierDistant + titre);
byte[] bytesArray = new byte[4096];
int bytesRead = -1;
//tant qu'on a pas atteint la fin
int transferé = 0;
double pourcentage = 0;
controller = mainApp.showProgressionBarre();
while ((bytesRead = inputStream.read(bytesArray)) != -1) {
//on écrit les octets dans l'emplacement précisé
outputStream.write(bytesArray, 0, bytesRead);
transferé += bytesRead;
pourcentage = (transferé * 100 / size);
controller.setPourcentageAvancement(pourcentage);
}
//fermer les flux de lecture de d'écriture
inputStream.close();
outputStream.close(); |
Controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class ProgressionBarreController implements Initializable {
private MainApp mainApp;
private Stage dialogStage;
private double pourcentageAvancement;
@FXML
private ProgressBar avancementBox;
@FXML
private Label avancementLbl;
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
public void setDialogStage(Stage dialogStage) {
this.dialogStage = dialogStage;
}
public void setPourcentageAvancement(double avancement) {
this.pourcentageAvancement = avancement;
avancementBox.setProgress(pourcentageAvancement / 100);
avancementLbl.setText("Patientez... " + pourcentageAvancement + "%");
System.out.println("pourcentage : " + pourcentageAvancement + "%");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
} |
MAIN d'où je lance la fenêtre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public ProgressionBarreController showProgressionBarre() {
try {
//Créer une nouvelle fenêtre
progressionBarreStage = new Stage();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("View/progressionBarre.fxml"));
AnchorPane page = (AnchorPane) loader.load();
progressionBarreStage.setTitle("Avancement du téléchargement");
progressionBarreStage.getIcons().add(new Image("/App/Images/Icone_UCH.png"));
progressionBarreStage.initModality(Modality.NONE);
Scene scene = new Scene(page);
progressionBarreStage.setScene(scene);
progressionBarreStage.setResizable(false);
ProgressionBarreController controller = loader.getController();
controller.setDialogStage(progressionBarreStage);
controller.setMainApp(this);
progressionBarreStage.show();
return controller;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} |
Es que quelqu'un comprend se qui se passe ? Par avance merci pour vos retours.