IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

gérer une exception envoyée par un handler de thread


Sujet :

avec Java

  1. #1
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    Par défaut gérer une exception envoyée par un handler de thread
    Bonjour,

    je débute en java et j'ai un problème pour "catcher" une exception :

    J'ai un programme qui lance une thread pour traiter une tache de fond : charger des données xml. Quand cette tâche est finie, on envoie un message à un handler pour qu'il parse ces données xml. Lorsqu'il y a une erreur de parse du xml, je lève une exception et je fais throw en espérant arriver à récupérer cette exception dans la thread principale mais je n'y arrive pas.
    Quelqu'un aurait-il une solution ou une explication sur la gestion d'une exception en multi-thread ?

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    .....
    public class MyClass { 
    
    	private DownloadXML DwXml;
    	static final String myfile = "monfichier.xml";
    
    	private Handler handler = new Handler(){
    		public void handleMessage(Message msg) {
    			Log.i("handler","handlemessage");
    			FileInputStream fin;
    			mydevitems=null;
    			XStream xstream = new XStream(new DomDriver());
    			xstream.alias("data", DevItems.class);
    			xstream.alias("point",DevEntry.class);
    			xstream.addImplicitCollection(DevItems.class, "entries");
    			
    			//puis parser les données
    			try {
    				fin = myctx.openFileInput(myfile);
    				mydevitems = (DevItems) xstream.fromXML(fin);
    			} catch (FileNotFoundException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (StreamException e1) {
    				//erreur de parsage du fichier, on l'efface et on quitte ??
    				throw(StreamException)e1;
    			} 
    			
                     }
    		
    	};
    
            public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    	        //charger le fichier
    	        loadTaux();
    
    	}
    
    	private class LoadingThread extends Thread {
    		private DownloadXML myDwXml;
    
    		public LoadingThread(DownloadXML _dwxml){
    			myDwXml = _dwxml;
    		}
    
    		public void run() {
    			myDwXml.readXmlFromUrl();
    		}
    	}
    
    	//chargement du fichier des taux de change
    	public void loadTaux() {
    
    		LoadingThread process = new LoadingThread(DwXml);
    		process.start();
    	}
    
            Public void newMsg(String message) {
    		// TODO Auto-generated method stub
    		try {
    			handler.sendEmptyMessage(0);
    		} catch(StreamException e1) {
    			//something to do
    		}
    	}
    }
    Merci pour vos idées

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 978
    Points
    7 978
    Par défaut
    Il y'a moyen je pense a l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.setDefaultUncaughtExceptionHandler(...);
    Peut être que ce petit bout de code pourrait t'aider.

    La ou tu as ton code qui va lancer la thread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    RunTimeExceptionHandler RunTimeExceptionR = new RunTimeExceptionHandler();
    			Thread t = new Thread()
    			{
    				@Override
    				public void run()
    				{
    					init_Splash_And_MainFrame();
    				}
    			};
    			Thread.setDefaultUncaughtExceptionHandler(RunTimeExceptionR);
    			// Starting the thread. (and the program :)
    			t.setName("Thread init - Splash and Mainframe");
    			t.start();
    et voici un classe qui dérive de UncaughtExceptionHandler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class RunTimeExceptionHandler implements UncaughtExceptionHandler
    {
     
    	public RunTimeExceptionHandler()
    	{
     
    	}
     
    	@Override
    	public void uncaughtException(Thread thread, Throwable ex)
    	{
    		// Log into Log4J.
    		Logs.getLogger().fatal("RuntimeException", ex);
    		// Avertir le user.
    		RunTimeExceptionDialog rteh = new RunTimeExceptionDialog(ex); // Petite classe de dialog a moi.
    		rteh.setVisible(true);
    	}
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Il y'a moyen je pense a l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.setDefaultUncaughtExceptionHandler(...);
    Effectivement ça fonctionne très bien ! merci pour l'idée et le code !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer en javascript une variable envoyée par radio buttom
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 07/02/2008, 16h04
  2. Gérer une Exception
    Par MASSAKA dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2007, 10h25
  3. Ne pas gérer une exception
    Par flames dans le forum Langage
    Réponses: 1
    Dernier message: 06/05/2007, 16h48
  4. Réponses: 2
    Dernier message: 02/06/2005, 18h12
  5. Expliciter une exception levée par un objet OLE
    Par Bleuarff dans le forum Windows
    Réponses: 3
    Dernier message: 12/05/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo