Bonjour,
Mes excuses par avance concernant cette question qui a déjà été traitée de très nombreuses fois, mais après 2 jours de recherches je n'ai toujours pas trouvé la solution
J'ai une méthode qui télécharge un fichier et qui devrait afficher une fenêtre avec une barre de progression. Le problème, bien connu, est que cette barre ne défile pas...
Cette méthode faisant partie d'une liste de méthode qui doit se succéder, je ne pas la mettre entièrement dans un Thread. Seul la mise à jour de la barre de progression doit l'être.
Voilà la méthode en question
Ma classe ProgressBarView n'est qu'un JDialog dans lequel j'ai ajouté un JProgressBar. Aucun Thread n'est présent dans cette classe.
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
35
36
37
38
39
40 public void downloadPluginConversion() throws Exception{ //Barre de progression String titre = "Télechargement et installation du plugin"; final ProgressBarView progressBar = new ProgressBarView(titre); progressBar.setVisible(true); progressBar.setAlwaysOnTop(true); progressBar.start(); //Initialisation chemin source et chemin destination URL src = new URL("http://blabla/truc.exe"); File dest = new File("C:/cheminDeDest/truc.exe"); //Création du listener UrlDownloaderListener listener = new UrlDownloaderListener(){ public void progressionChanged(UrlDownloader source, double progression){ progressBar.setProgression(new Double(progression).intValue()); } }; //lancement du telechargement UrlDownloader downloader = new UrlDownloader(src, dest); downloader.addListener(listener); downloader.startAndWait(); //Execution de l'exe String cmd =""; try { cmd ="\"" + dest.getAbsolutePath()+ "\" /S"; Runtime r = Runtime.getRuntime(); Process p = r.exec(cmd); p.waitFor();//si l'application doit attendre a ce que ce process fini }catch(Exception e) { System.out.println("erreur d'execution " + cmd + e.toString()); } //Suppression de l'exe dest.delete(); progressBar.clean(); }
Personnellement j'aurais pensé que le thread devrait se trouver lors du " progressBar.setProgression(new Double(progression).intValue());" mais cela ne change rien.
Une petite idée?
Merci.
Partager