~ / M1 / TLI / tps / notification-download /

Tâches longues et interactivité avec Java/Swing

© 2013 - Renaud Blanch

Le but de ce TD 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échargement qui permettra aux utilisateurs de lancer, mettre en pause, annuler plusieurs téléchargements simultanément.

Questions

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 ftp://anonymous:toto@ftp.oleane.fr/pub/linux/kernel/v2.6/linux-2.6.39.tar.gz
Lisez 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 un téléchargement en tâche de fond (dans un Thread dédié) et utilise une barre de progression pour donner un feedback à la progression du téléchargement. Pour cela, réalisez un PropertyChangeListener qui s'abonne à downloader.fc.Downloader et met à jour la valeur de la barre de progression (setValue et setString lorsque la propriété progress change.

Modifiez la classe downloader.fc.Downloader pour en faire une spécialisation de SwingWorker. Adaptez le reste de votre code à ce changement, et expliquez en quoi cela simplifie votre code.

Ajoutez à 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. Pour gérer la liste des téléchargement, vous pouvez utiliser le gestionnaire de géométrie downloader.ui.StackLayout qui vous est fourni. exemple d'interface

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).

Le résultat final pourra ressembler à l'image suivante: interface finale

mise à jour : 26 avril 2013