2010-12-07 11 views
1

Je télécharge un fichier volumineux à partir d'Internet dans mon code et souhaite montrer à l'utilisateur une barre de progression pour montrer à quelle distance se trouve le téléchargement, de préférence dans une fenêtre séparée. boîte vers le haut.Afficher une barre de progression et la lier à un téléchargement

Comment ferais-je cela?

+0

Je ne sais pas vraiment par où commencer, c'est le problème. Les tutoriels que j'ai trouvés ne permettent pas de relier la barre à autre chose qu'à un délai. Je ne veux pas ça, je veux savoir jusqu'où va le téléchargement. – Jon

+0

Comment lieriez-vous un délai? –

+0

Les ont un retard de 1000 puis incrémentent le compteur qui est lié à la barre. Je ne peux pas voir comment cela peut être lié. – Jon

Répondre

2

Voir javax.swing.ProgressMonitorInputStream.

Les gens semblent manquer cela. Peut-être que c'est parce que ça ne commence pas par 'J'. ;-)

+0

Je l'ai mis en œuvre et il semble tellement plus agréable que tout ce que j'ai pu trouver, mais il n'affiche pas de pop-up comme le lien décrit. Ma tâche prend environ 10 secondes et pourtant elle ne montre jamais rien. Broche ProgressMonitorInputStream = new ProgressMonitorInputStream (null, nomFichier, est); Lorsque "est" est le flux d'entrée. Y a-t-il quelque chose qui me manque? – Jon

+0

Vous n'êtes pas sûr que la valeur null est kasher. Vous pouvez obtenir le ProgressMonitor sous-jacent et l'initialiser avec des données, par ex. maximum prévu, temps pour apparaître, etc. – EJP

0

Quelle infrastructure d'interface utilisateur utilisez-vous? Dans le cas où il s'agit de Swing, vous pouvez envelopper votre code de téléchargement dans SwingWorker et mettre à jour la barre de progression sur les écritures de la mémoire tampon. Vous pouvez également stocker le nombre d'octets écrit dans la variable locale et utiliser Timer, mais il semble moins élégant (mais fonctionne).

Si ma supposition à propos de Swing est correcte, wikipedia a un bon exemple SwingWorker pour vous aider à démarrer.

+0

Oui, j'utilise swing un exemple qui est assez utile quelques choses qui me confondent encore, cependant; Dans leur exemple, ils utilisent Document. Je ne comprends pas vraiment ce que c'est pour l'initialisation de SwingWorker. – Jon

+0

Il s'agit d'un exemple étendu utilisant des génériques (vous pouvez utiliser SwingWorker de manière simpliste si vous le souhaitez, c'est-à-dire sans paramètres génériques). En bref: le premier générique définit le type de l'objet qui sera retourné à la fin du travail, le second paramètre générique est utilisé pour le stockage intermédiaire des résultats. –