~ / M1 / TLI / tps / notification-download /
© 2013—2017 — Renaud Blanch
Le but de ce TP est d'aborder la question des tâches longues dans les applications interactives. Celles-ci nécessitent en effet d'utiliser une programmation multi-fils d'exécution si l'on veut que l'application reste interactive pendant l'exécution de la tâche longue. Il s'agit donc de réaliser un gestionnaire de téléchargements qui permettra aux utilisateurs de lancer, mettre en pause, annuler plusieurs téléchargements simultanément.
Récupérez l'archive du noyau fonctionnel et décompressez-la. Le noyau fonctionnel permet de télécharger les fichiers dont les URLs sont passées sur la ligne de commande. Par exemple :
# tar xzvf downloader.src.tgz # cd downloader # ant jar # java -cp build/jar/Downloader.jar downloader.fc.Test http://iihm.imag.fr/index.htmlLisez et comprenez le code de la classe
downloader.fc.Downloader
ainsi que la manière dont la classe downloader.fc.Test
l'utilise.
Créez un classe downloader.ui.Main
qui ouvre un fenêtre principale, lance en tâche de fond (dans un Thread
dédié) le téléchargement des URL passées sur la ligne de commande.
Chaque téléchargement est représenté par une barre de progression qui donne un feedback à sa progression.
Pour cela, réalisez un ChangeListener
qui s'abonne à downloader.fc.Downloader
et met à jour la valeur de la barre de progression lorsque la propriété progress
change.
Pour gérer la liste des téléchargement, vous pouvez utiliser le conteneur VBox
à l'intérieur d'un ScrollPane
.
Modifiez la classe downloader.fc.Downloader
pour en faire une spécialisation de Task
, la classe qui abstrait une tâche asynchrone notifiant de son avancement.
Adaptez le reste de votre code à ce changement, et expliquez en quoi cela le simplifie.
Ajoutez en bas de la fenêtre principale un champs texte et un bouton qui permettent à l'utilisateur d'entrer une URL et de lancer son téléchargement.
Améliorez la présentation des téléchargements en affichant avec chaque barre de défilement l'URL du fichier téléchargé et un bouton permettant de supprimer ce téléchargement.
Ajoutez un bouton permettant alternativement de mettre un téléchargement en pause et de le reprendre.
Pour cela, ajouter des méthodes play
et pause
à la classe downloader.fc.Downloader
(on pourra à cette fin utiliser un Lock
).
Il faudra prendre garde à relâcher le lock (si besoin) quand on supprime le téléchargement.
Le résultat final pourra ressembler à l'image suivante:
mise à jour : 23 novembre 2017