Cours 4. - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste



Documents pareils
Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Synchro et Threads Java TM

Un ordonnanceur stupide

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

INITIATION AU LANGAGE JAVA

Notion de thread (1/2)

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Threads. Threads. USTL routier 1

Auto-évaluation Programmation en Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Introduction : les processus. Introduction : les threads. Plan

RMI le langage Java XII-1 JMF

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Programmer en JAVA. par Tama

Support de cours Java

ACTIVITÉ DE PROGRAMMATION

Desktop Intégration. Rémi Forax

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Java 7 Les fondamentaux du langage Java

Développement Logiciel

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Remote Method Invocation Les classes implémentant Serializable

Package Java.util Classe générique

TP1 : Initiation à Java et Eclipse

Initiation à JAVA et à la programmation objet.

PIGOURIER Vincent ANNEE SPECIALE 99/00 RAPPORT DE PROJET : LES THREADS JAVA. Responsable : Serge Rouveyrol

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

On appelle variable condition une var qui peut être testée et

Projet de programmation (IK3) : TP n 1 Correction

Programmation Objet Java Correction

as Architecture des Systèmes d Information

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Une introduction à Java

Une introduction à la technologie EJB (2/3)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours de Systèmes d Exploitation

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Interfaces graphiques avec l API Swing

Remote Method Invocation (RMI)

Chapitre 10. Les interfaces Comparable et Comparator 1

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Calcul Parallèle. Cours 5 - JAVA RMI

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Programmation Par Objets

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

TD/TP PAC - Programmation n 3

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Généralités sur le Langage Java et éléments syntaxiques.

Programmation par composants (1/3) Programmation par composants (2/3)

Corrigé des exercices sur les références

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

Cours 1: Java et les objets

Dis papa, c est quoi un bus logiciel réparti?

Cours Programmation Système

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Programmation par les Objets en Java

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programmation Objet - Cours II

Cours de Génie Logiciel

Langage Java. Classe de première SI

Programmation avec des objets : Cours 7. Menu du jour

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Diagramme de classes

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Le meilleur de l'open source dans votre cyber cafe

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Cours 14 Les fichiers

Premiers Pas en Programmation Objet : les Classes et les Objets

Objets et Programmation. origine des langages orientés-objet

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Plan du cours. Historique du langage Nouveautés de Java 7

Java Licence Professionnelle CISII,

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Traitement de données

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Partie 7 : Gestion de la mémoire

OPTENET DCAgent Manuel d'utilisateur

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

TD/TP PAC - Programmation n 3

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Java - la plateforme

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement)

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Application web de gestion de comptes en banques

Transcription:

Cours 4 - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste JComboBox et JList F. Gayral 1

Rappel : multi-tâches multi-tâches : exécution de plusieurs processus simultanément (Windows NT, Unix...). Un processus est un programme en cours d'exécution. L ordonnanceur distribue le temps CPU entre les processus Un processus peut être dans différents états. En exécution (running) : a le processeur Prêt : le processus est prêt à s'exécuter, mais n'a pas le processeur (occupé par un autre processus en exécution) Bloqué F. Gayral 2

états d un processus et transitions Thread passe de l état en exécution à l état bloqué : - S'il reçoit l'ordre de dormir - s il a besoin d une ressource qui n est pas disponible Thread passe de l état bloqué à l état Prêt : - Si son temps de sommeil est épuisé - Si la ressource qu il attendait s est libérée F. Gayral 3

Rappel : multi-threads Un thread ("processus léger") est un processus à l'intérieur d'un processus. multi-threading : exécution à l intérieur d un processus de plusieurs sous-tâches (exécution concurrente de threads) Un processus peut posséder plusieurs threads. Les ressources allouées à un processus (temps processeur, mémoire) sont partagées entre les threads qui le composent. Un processus possède au moins un thread (qui exécute le programme principal, habituellement la fonction main()). F. Gayral 4

Différences entre thread et processus Au niveau de la mémoire : Les sous-processus issus d un même processus ont leur propre espace d adressage et doivent, pour communiquer, utiliser des moyens de communication specifiques (tubes..) Les threads issus d un même processus partagent la même zone mémoire (segments de code et de données), ce qui rend très facile (et périlleux!) la communication entre threads. F. Gayral 5

Intérêts des threads en général Communication très simple grâce aux données partagées Partager le temps alloué au processus père entre plusieurs threads, chacun d eux exécutant une fonction précise Augmenter la "productivité" d une application par l'exécution concurrente de ces threads Exemples Un navigateur est un logiciel multi-thread : le chargement d'une page laisse la main à l'utilisateur Un serveur peut répondre à des demandes de connexions de clients en créant un thread par client F. Gayral 6

Intérêt des threads pour une application graphique Tout programme qui s exécute possède au moins un thread : le thread principal, celui qui exécute Il existe d autres threads en arrière-fond : le thread dédié au garbage un thread qui traite les événements clavier et souris On crée d autres threads lorsque l application nécessite d exécuter une tâche longue et consommatrice de temps ou une tâche répétitive (Exemple : animation, gros calculs, attente de connexion, entrée/sortie (chargement d'images)) Créer des threads chargés de ces tâches plutôt que d occuper le thread principal à ces tâches F. Gayral 7

Threads en java En Java, les threads font partie intégrante du langage: La classe Thread L interface Runnable Les programmes utilisant des threads sont portables d une plate-forme à l autre mais l exécution peut varier (comportement de l ordonnanceur non spécifié par Sun) F. Gayral 8

Quelques constructeurs : La classe Thread Thread(); Thread(String nom); Thread(Runnable cible); Quelques méthodes d instance : String getname(); void start(); méthode qui met le thread à l'état prêt void run(); méthode qui sera exécutée dès que le thread aura la main boolean isalive(); F. Gayral 9 void setpriority(int newpriority);

La classe Thread Constantes de classe : permet de définir des priorités MIN_PRIORITY, MAX_PRIORITY, NORM_PRIORITY Quelques méthodes de classe : static Thread currentthread(); retourne la référence du thread qui a la main static void sleep(long millis) throws InterruptedException; fait dormir le thread qui a la main static int enumerate(thread[] t) throws SecurityException range dans F. t Gayral place tous les threads 10

Comment créer un thread chargé d'une tâche particulière Deux méthodes Sous-classer la classe Thread Utiliser l'interface Runnable et faire que la classe souhaitant "être animée" implémente cette interface F. Gayral 11

Méthode 1 : sous-classer la classe Thread Créer une classe qui hérite de la classe Thread. class MonThread extends Thread { public void run {... mettre ici le code à exécuter, c'est à dire l'activité que le thread doit avoir... }} L utiliser : MonThread th = new MonThread(); th.start(); F. Gayral 12

Méthode 2: implémenter l'interface Runnable Faire que la classe souhaitant "être animée" implémente l'interface Runnable (dont la seule méthode est run). class MaClasse extends implements Runnable { public void run {... code à exécuter par le thread... } } L utiliser : MaClasse mc = new MaClasse( ); Thread th= new Thread(mc); F. Gayral 13

Dans les deux cas : La tâche à effectuer par le thread est implémentée dans la méthode run() Pour lancer (mettre à l état prêt) un thread, lui adresser la méthode start Le thread s'arrête quand il termine sa méthode run(). La tâche correspondante dans le SE disparaît alors. Un thread doit mourir "naturellement" : ==> On ne peut pas l'arrêter en lui adressant une méthode particulière (la méthode stop est deprecated) ==> si on veut l'arrêter "de l'extérieur" : - programmer la méthode run comme une boucle qui tourne tant qu'un indicateur est vrai - positionner l'indicateur à faux quand nécessaire F. Gayral 14

Commentaires sur la 2ème méthode Si un thread est construit avec comme cible un objet Runnable, le code à exécuter par le thread est le code indiqué dans la méthode run de la cible. MaClasse mc = new MaClasse( ); Thread th= new Thread(mc); th.start(); // th est prêt à exécuter le code de la méthode run décrit dans la cible (ici dans la classe MaClasse) Intérêt de cette deuxième méthode : la classe MaClasse peut hériter d une autre classe exemple : class MaClasse extends JFrame implements Runnable F. Gayral 15

Application graphique avec Thread : un canevas d'utilisation de Runnable public class MaClasse extends J.. implements Runnable { // variables membres private Thread tache; private boolean vivant; + public void run() { while (vivant).{ } } + F. Gayral 16

Un exemple complet: fenêtre affichant un texte caractère par caractère Analyse Démo Besoin d'un seul thread chargé de l'affichage caractère par caractère d'un texte Besoin d'une sous-classe de JFrame avec un JTextArea en zone centrale ==> choisir la deuxième méthode public class FenProgressTexteRunnable extends JFrame implements Runnable F. Gayral 17

Plus de détails sur le thread Quelle est l activité du thread? afficher dans la zone de texte prévue le texte lettre après lettre. Quand doit-il arrêter? le texte est complètement affiché Quand doit-il être lancé? Quand la fenêtre s'ouvre au départ F. Gayral 18

public class FenProgressTexteRunnable extends JFrame implements Runnable { private JTextArea zonetexte; private String texte; private int indtext; private Thread thaffiche; public FenProgressTexteRunnable(String title, String text, int w, int h) { super(title); texte= text; indtext = 0; this.initialise(); this.setsize (w, h); this.lancethread(); this.show(); } public void initialise() { zonetexte=new JTextArea(); F. Gayral 19

public void lancethread() { if (thaffiche==null) {thaffiche=new Thread(this); thaffiche.start(); } } public void run() { while (indtext < texte.length() ) { zonetexte.append(texte.charat(indtext)+""); indtext++; try {Thread.sleep(100);} catch(interruptedexception e) {System.out.println("pb dans sleep");} } // fin du while System.out.println("mort de sa belle mort"); thaffiche=null; } public static void main (String args[]) { String texte="l IUT, c est SUPER!!! En java graphique, on s amuse avec le jeu de la vie...\n"; new FenProgressTexteRunnable("Fenêtre texte lettre à lettre", texte, 600,400); F. Gayral 20

Remarques Le thread est mis à l état prêt dans le constructeur de la fenêtre lancethread() Dès qu il a la main, la méthode run s exécute et le thread commence sa boucle d activité : while (indtext < texte.length() ) Le processeur peut lui être repris quand il dort Quand il aura de nouveau la main, il continuera là où il s était arrêté Le thread meurt quand il aura fini sa méthode run : indtext== texte.length() : tout le texte a été affiché On le met à null pour le faire disparaître en tant qu objet java F. Gayral 21

Les composants permettant un choix dans une liste F. Gayral 22

Plusieurs classes permettant un choix dans une liste ComboBox non éditable ComboBox éditable JList F. Gayral 23

La classe JList JList : composant permettant de choisir dans un ensemble connu de données Ces données peuvent être mémorisées dans un tableau : constructeur JList(Object[] listdata) String[] data = {"one", "two", "three", "four", "five", }; JList list = new JList(data); dans un vecteur : constructeur JList(Vector listdata). Vector v=new Vector(); v.addelement("one " ); JList list = new JList(v); F. Gayral 24

Sélectionner dans une liste On peut sélectionner un ou plusieurs items dans une liste suivant la valeur d un mode de sélection, constante de classe de ListSelectionModel SINGLE_SELECTION SINGLE_INTERVAL_SELECTION MULTIPLE_INTERVAL_SELECTION F. Gayral 25

Sélectionner dans une liste Par défaut, plusieurs sélections possibles Pour changer le mode de sélection : list.setselectionmode(listselectionmodel.single_sele CTION); Pour reconnaître un élément sélectionné par l utilisateur : Lier la JList à un écouteur d'événement de sélection interface ListSelectionListener ListSelectionListener : interface qui a une seule méthode : public void valuechanged(listselectionevent e) F. Gayral 26

Récupérer les items sélectionnés dans une liste Méthode de JList pour récupérer les indices int getselectedindex() retourne le premier index sélectionné, -1 si aucune sélection int[] getselectedindices() retourne un tableau contenant les indices sélectionnés dans l ordre croissant Méthode de JList pour récupérer les objets Object getselectedvalue() public Object[] getselectedvalues() F. Gayral 27