Utilisation de threads pour lancer deux fonctions d'une classe

dlaur94 Messages postés 4 Date d'inscription vendredi 7 mai 2010 Statut Membre Dernière intervention 21 décembre 2012 - 11 mai 2010 à 18:34
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011 - 12 mai 2010 à 15:10
Bonjour,
j'ai une fenêtre avec deux panels: un principal qui affiche une photo en grand, l'autre qui affiche des vignettes des photos. Les photos des deux panels proviennent toutes d'un dossier que l'on aura préalablement sélectionné.
Ma fenêtre est issue d'une classe qui hérite de JFrame et qui peut donc implémenter Runnable, (à décider).
Je voudrais que l'affichage de ma photo en grand et celui des vignettes se fasse dans deux threads différents, car le chargement des vignettes est très long.
Je sais qu'il faut une fonction run() qui contient le traitement à effectuer pour le premier thread.
Mais je ne sais pas comment procéder pour lancer indépendamment ma deuxième fonction. Quelqu'un peut-il m'aider?

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 18:49
Salut,

Il te faut 2 classes (qui implémente Runnable ou qui hérite de Thread) et qui implémente la fonction run. Par exemple (à rectifier si il y a des erreurs) :
public class TaFenetre {

public void methode1() {
// chargement de l'image en grand
}

public void methode2() {
// chargement des vignettes
}

// thread pour appeler la méthode 1 :
private class ThreadMethode1 extends Thread {
  public void run() {
    methode1();
  }
}

// thread pour appeler la méthode 2 :
private class ThreadMethode2 extends Thread {
  public void run() {
    methode2();
  }
}

// et enfin, pour lancer tes threads :
public static void main(String[] args) {
  Thread threadMethode1 = new ThreadMethode1();
  Thread threadMethode2 = new ThreadMethode2();
  threadMethode1.start();
  threadMethode2.start();
}
}

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
dlaur94 Messages postés 4 Date d'inscription vendredi 7 mai 2010 Statut Membre Dernière intervention 21 décembre 2012
11 mai 2010 à 19:00
Un très gros merci pour ton aide. Je vais essayer ta technique.

Daniel
0
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 mai 2010 à 04:35
salut,
je vois pas l'utilité de deux thread, si un seule fera l'affaire.
le thread devrait lancer l'affichage de l'image en grande format et redéfinir l'icone a affcher (chose que ta du traiter par tes propres moyen) une fois c'est fait tu repaint la zone de dessin de l'icone.
si tu tiens vraiment a avoir deux thread fais comme notre collégue ta proposé faudra rajouter une synchronisation des deux threads. soit par méthode ou objet. dans ton cas ça sera une par méthode. sinon tu peux utliser join pour qu'ils fassent el boulot en meme temps.
0
dlaur94 Messages postés 4 Date d'inscription vendredi 7 mai 2010 Statut Membre Dernière intervention 21 décembre 2012
12 mai 2010 à 08:50
Merci Neone. Mais peux-tu me montrer comment faire la synchronisation par méthode ou le Join, SVP?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neone Messages postés 96 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 7 mars 2011
12 mai 2010 à 15:10
Bonjour,
pour join ta le code suivant :
http://www.java2s.com/Code/JavaAPI/java.lang/ThreadjoinUsingjointowaitforthreadstofinish.htm
pour la synchronisation je vais te mettre un exemple que j'ai fait de communication par bus I2C :
public class CasccesI2C {
public synchronized void ecriture() throws InterruptedException
{
System.out.println("DEBUT écriture: "+Thread.currentThread().getName());
Thread.sleep(5);
System.out.println("FIN écriture: "+Thread.currentThread().getName());
}
public synchronized void lecture() throws InterruptedException
{
System.out.println("DEBUT lecture: "+Thread.currentThread().getName());
Thread.sleep(5);
System.out.println("FIN lecture: "+Thread.currentThread().getName());
}

}
c par synchronisation de méthode. une méthode déja appelé ne peut étre appeler avant la fin de son execution. du coup c'est a toi d'élaborer ton scénario.
bon courage
0
Rejoignez-nous