Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2508 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Thread & Exception

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Thread & Exception

n°1563459
Grounded
Man with burning hair
Posté le 22-05-2007 à 14:34:29  profilanswer
 

Voila, j'instancie plusieurs threads de cette manière :
 

Code :
  1. try {
  2.         javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
  3.          public void run() {
  4.           MonThread monThread = new MonThread();
  5.          }
  6.         });
  7. } catch (Exception e) {
  8.         System.err.println("Thread didn't successfully launch" );
  9. }


 
Ils discutent entre eux, gèrent des process de manière asynchrone, ils font leur boulot de thread quoi. :o
 
Ce qui me pose problème c'est que j'aimerais centraliser les remontées d'exceptions
 
Prenons un exemple :
 
Une méthode A, de thread A, appelle la méthode B de Thread B.
Thread B fait son boulot, et pouf jette une exception, elle remonte jusqu'à la méthode B qui a été appelé, puis elle continue son chemin jusqu'à la méthode A de Thread A.
 
Si je veux la gérer, il faut que ça soit Thread A qui le fasse. Or imaginons que Thread B veuille appeler une méthode de Thread A, la il faut que ça soit Thread B qui gère les exception... Enfin, impossible de centraliser la gestion d'erreur :/
 
Quelqu'un à une idée?


---------------
Profil strava
mood
Publicité
Posté le 22-05-2007 à 14:34:29  profilanswer
 

n°1565765
tarxx
Posté le 27-05-2007 à 03:49:23  profilanswer
 

Salut;
 
Ah la pb classique de communication entre les threads...
 
Une façon que je trouve pratique pour permettre à un thread pour faire passer des objets à un autre thread est l'usage tube (pipe) entre les threads. Un pipe est un canal de communication où des threads écrivent via un PipedWriter int ou des objets (comme une String avec un message d'erreur dans les blocks catch...)via un buffer et un (ou plusieurs) autre les récupèrent avec un PipedReader (dont les méthodes read bloquent le thread lecteur jusqu'à ce qu'un writer envoie quelque chose...)
 
pour ce faire avant de lancer tes theads (après le premier try de ton exemple), rajoute
 
 
 
PipedReader pRead = new PipedReader () ;
PipedWriter  pWrite = new PipedWriter(pRead);
 
Note le fait que l'un reçoit l'autre un param pour les conecter...  
 
Il faut que le(s) process qui génèrent les exceptions reçoit un pipedwriter (par exemple, déclare des classes héritant de Thread dont le constructeur reçoit un PipedWriter  et le "sauve" dans un champ de classe) Ainsi, dans les catch des méthodes de ce thread, fais des  
 
write(0 /*cad un int*/);
ou utilise des write(char[] cbuf,
                  int off,
                  int len)
ou + simple  avec le jdk 5.0 write(String s)  // que je te conseille...
pour passer des objets .
 
Ton thread père, que tu nommes "A" plus haut fera alors une boucle :
 
int i = 0;
while (true) {
  try {
    i = pw.read();
    System.out.println("reçu = " +i);
    // pour le write(int) de laaut cote, passe un tableau de char pour récupérer la string...
  } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
 
 
Note que cela veut dire que la thread A est alors dédié au traitement des réceptions, si c'est le thread de ton IHM, délègue le traitement des erreurs à un autre thread (à qui tu passera un param une zone de ton IHM où afficher l'erreur par exemple) ou à défaut passe par un Exchanger.
 
Bonne chance...
 
 
L'i

n°2037317
trevor
laissez la vie vous étonner...
Posté le 20-11-2010 à 11:11:59  profilanswer
 

Déterrage de topic, certes, mais comme il est intéressant. J'ai lu effectivement des choses sur les "Pipe", mais il faut effectivement éviter le blocage de l'IHM et donc le problème reste entier.
 
Je ne suis pas très fan du délègue le traitement des erreurs à un autre thread (à qui tu passera un param une zone de ton IHM où afficher l'erreur, en revanche, j'aimerais en savoir + sur le Exchanger... quoi t'est-ce que ça ?
 
Merci d'avance pour vos réponses.


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Thread & Exception

 

Sujets relatifs
Comment créer une calculatrice en java ? Probleme d'affichageInstaller java sous linux
installer une machine virtuelle JAVA sur la clé USB elle-mêmeEncodage de sons sous java
Java et linux (dos2linux)java.library.path dans MANIFEST
[JAVA] export en jar, et utilisation de librairies externes.Exception in thread "main".java.lang.StringIndexOutOfBoundsException
Pbl l'éxécution java HelloWorlApp message :"Exception in thread"main".[Java] Exception in thread "main" sous Windows et pas sous linux ???
Plus de sujets relatifs à : [Java] Thread & Exception


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR