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

Langage Java Discussion :

Identifier les méthodes actives


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut Identifier les méthodes actives
    Salut,

    Je débute, ou presque, en java. Mes excuses donc si ma question est triviale, si elle est mal exprimée, ou si la réponse est dans la FAQ : j'ai fouillé, pas trouvé.

    Voilà de quoi il s'agit. Si mon programme rencontre une division par zéro il s'interrompt et m'indique très précisemment où a eu lieu l'erreur, non seulement l'objet et la méthode coupable, mais aussi toutes les méthodes actives qui ont conduit à l'erreur.

    Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.ArithmeticException: / by zero
            at CommoditiesMarket.updateOffer(CommoditiesMarket.java:141)
            at Store.sell(Store.java:65)
            at Firm.sell(Firm.java:237)
            at Household.purchase(Household.java:62)
            at Household.spend(Household.java:118)
            at HouseholdsSector.spend(HouseholdsSector.java:81)
            at Test.doPeriod(Test.java:23)
            at Test.main(Test.java:58)
    J'en conclus qu'il est possible de récupérer ces informations au cours du fonctionnement normal du programme, par exemple pour écrire mes propres messages d'alerte.

    Je résume : comment au sein d'une méthode, récupérer le nom (et éventuellement la ligne) de la méthode (voire de toutes les méthodes) actives et ayant conduit à l'exécution de la méthode courante ?

  2. #2
    Membre expérimenté

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Par défaut
    Bonjour,

    Tout d'abord pour capturer l'exception il faut utiliser les blocs try/catch. Dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    	int i = 100/0;
    } catch (ArithmeticException e) {
    	System.out.println("erreur");
    }
    Ensuite pour :

    Je résume : comment au sein d'une méthode, récupérer le nom (et éventuellement la ligne) de la méthode (voire de toutes les méthodes) actives et ayant conduit à l'exécution de la méthode courante ?
    Je n'ai jamais fait celà, mais c'est possible : tu devrais regarder la Javadoc et les classes Throwable et StackTraceElement. Je ne voudrais pas te dire de betises mais je crois que tu peux utiliser la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public StackTraceElement[] getStackTrace()

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Par défaut
    Bonjour,

    Quelques éléments de réponses dans la FAQ sur la pile d'appel d'une méthode, sur les exceptions dans les applications graphiques
    Et un bon tutorial pour gérer les exceptions, à lire en premier lieu.

    Un petit exemple de code pour afficher l'erreur dans la console + une fenêtre de dialogue à l'écran :
    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
     
    private void printErr(Throwable t, String errTitle) {
     
        StackTraceElement[] stackTrace = t.getStackTrace();
        StringBuffer message = new StringBuffer(t.getClass().getSimpleName());
        message.append(" : ");
        message.append(stackTrace[0].toString());
        message.append('\n');
        message.append("  --> ");
        message.append(t.getMessage());
        System.err.println(message.toString());
     
        JOptionPane.showMessageDialog(null,
            errTitle + "\n" + t.getClass().getSimpleName() + " : " + t.getMessage(),
            "Error " + t.getClass().getSimpleName(),
            JOptionPane.ERROR_MESSAGE);
      }
    A +
    Philippe

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Merci, ça marche très bien.

    Pascal

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Sinon à partir de Java 5.0 on peut utiliser directement la méthode getStackTrace() de la classe Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

    Mais attention car quel que soit la méthode utilisé, la génération de la pile d'appel est assez couteuse et ne dois pas être utilisé abusivement sous peine de plomber les perfs...

    a++

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    On peut appliquer les méthodes d'affichage ci-dessus dans une boucle sur exception.getCause(), pour explorer les exceptions en chaîne.

    Nicolas

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

Discussions similaires

  1. Garder l'icône "Identifier les objets" activée
    Par Kivenkantaja dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 12/06/2012, 22h06
  2. [EJB2.1 Entity] [BMP] les requetes doivent-elles se trouver directement dans les méthodes ?
    Par webspeak dans le forum Java EE
    Réponses: 2
    Dernier message: 24/03/2005, 08h34
  3. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 08h42
  4. Utiliser les méthodes des boutons crées en rafale.
    Par kabouns dans le forum Composants
    Réponses: 8
    Dernier message: 03/12/2004, 10h48
  5. [Lumières] Comment choisir les lumières à activer ?
    Par bigquick dans le forum OpenGL
    Réponses: 3
    Dernier message: 30/10/2004, 01h58

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