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 :
Controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
MAIN d'où je lance la fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager