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

Java Discussion :

Mon application s'arrête brutalement sans lever d'Exception


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut Mon application s'arrête brutalement sans lever d'Exception
    Je rencontre un problème qui me surprend car c'est la première fois que je suis confronté à un cas de figure pareil.

    J'appelle un simple constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class LstOperationSurCptDAO{// extends ServiceDAO {
        static private ServiceLogging Log = (ServiceLogging) ServiceLogging.getInstance(LstOperationSurCptDAO.class.getName());
     
        private AccesseurLstOperationSurCpt m_accesseurLstOperationSurCpt = null;
     
        public LstOperationSurCptDAO() {
            super();
        }
     
        [...]
    }
    Appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.out.println("appel");
    LstOperationSurCptDAO unAccesPortefeuille = new LstOperationSurCptDAO();
    System.out.println("fin");
    Mon application affiche "appel", mais n'affiche jamais "fin". Le programme s'arrête purement et simplement sans qu'aucune Exception n'ait été levée.

    Cela me surprend d'autant plus que le constructeur appelé n'effectue aucun traitement. La seule erreur pourrait provenir de l'initialisation du logger, mais dans ce cas je devrais avoir une Exception. Bref, je n'y comprends rien

    Avez-vous déjà rencontré un cas similaire ou avez-vous une explication ?

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    salut,

    question bête, pourquoi super() alors que tu n'étends aucune classe????

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    C'est une vieille application que je reprends en main. Je pense que l'appel de super() vient d'une version dans laquelle la classe héritait de ServiceDAO. Maintenant que ce n'est plus le cas, super() appelle tout simplement le constructeur de Object.

  4. #4
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    En lançant ton appli en debug, tu arrives jusqu'où???

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Serait-il possible que le ServiceLogging redirige le flux de sortie ou le flux d'erreur ?

    Est-ce que c'est idiot comme question ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Merci les gars pour votre aide. C'est Heimdal qui m'a mis sur la voie. Ce que je ne vous avais pas dis, c'est qu'il s'agissait d'un batch que j'exécute avec un .bat.

    Pour une raison que je ne comprends pas, l'application tourne parfaitement sous Eclipse, mais s'arrête brutalement sans erreur à partir d'un .bat.

    Si vous avez une explication, je suis vivement intéressé

  7. #7
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut
    Bonsoir,
    J'ai déjà eu un cas semblable: Aucune erreur trappée dans un catch()
    J'ai donc mis des logs un peu partout. Au final, l'exception (je ne me souviens plus de son nom, ni même si elle héritait de java.lang.Exception) ne passait pas dans catch() mais lorsqu'elle s'interrompte, elle passe bien dans le finally{}

    Piste: Est-ce la même JVM ? Y'a t'il un parametre dans le lancement par eclipse(Definition du PermGenSpace,...) qui soit différent ?

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    est-ce que ca utilise java ou javaw ? Que fait ce code ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try{
     //appel new
    catch (Throwable t){
        try{
           FileWriter fw = new FileWriter("log.txt);
           t.printStacktrace(fw);
           fw.close();
        } catch (Exception e) {t.printStacktrace();e.printStacktrace();}
    }
    C'est bourrin mais devrais parer à tout sauf les crash jvm, mais ils sont rarement discrets.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    est-ce que ca utilise java ou javaw ? Que fait ce code ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try{
     //appel new
    catch (Throwable t){
        try{
           FileWriter fw = new FileWriter("log.txt);
           t.printStacktrace(fw);
           fw.close();
        } catch (Exception e) {t.printStacktrace();e.printStacktrace();}
    }
    C'est bourrin mais devrais parer à tout sauf les crash jvm, mais ils sont rarement discrets.
    Effectivement, lorsque j'ajoute ce code, le fichier log.txt fait apparaître un java.lang.NoClassDefFoundError. Il y avait un \ en trop dans mon classpath.

    Ce qui me surprend, c'est que cette erreur aurait dû être remontée et tracée, ce qui n'est pas le cas.

    Avez-vous une explication ?

  10. #10
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par verbose Voir le message
    Avez-vous une explication ?
    Surement un bloc catch vide

    Vérifies bien le code des méthodes appelantes de ton constructeur...

    a++

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    autre possibilité: un web.xml précisant un gestion d'erreur, une ancienne version de tomcat 5.5 qui avait un bug dans cette gestion qui faisait si il était impossible de rediriger vers la pages d'erreur (exemple quand un partie de la réponse a déjà été envoyée), il droppait l'exception sans la logguer nulle part ^^

    Depuis ca termine quand meme soit dans catalina.out soit dans tomcat.log :p

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Surement un bloc catch vide

    Vérifies bien le code des méthodes appelantes de ton constructeur...

    a++
    Cette application n'utilise pas tomcat, il s'agit d'un simple batch.

    Il y a effectivement des catch qui ne reportent pas l'exception catchée et qui se contentent de laisser une trace dans les logs, mais ce sont les Exceptions qui sont catchée, pas les Error. J'ai remonté la pile d'appel et je suis certain que les Error ne sont pas catchées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
        //appel
    } catch(Exception e) {
        Log.debug("trace");
    }

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par verbose Voir le message
    J'ai remonté la pile d'appel et je suis certain que les Error ne sont pas catchées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
        //appel
    } catch(Exception e) {
        Log.debug("trace");
    }
    C'est remonté jusque Thread.start()? Regarde du coté de Thread.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) pour traiter les exception à ce niveau. Si il y a pas de handler, possible que l'exception disparraisse et que le thread meure avec elle

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    C'est remonté jusque Thread.start()? Regarde du coté de Thread.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) pour traiter les exception à ce niveau. Si il y a pas de handler, possible que l'exception disparraisse et que le thread meure avec elle
    Cette application est monothread. Je vais quand même essayer lundi cette méthode setUncaughtExceptionHandler.

Discussions similaires

  1. [.NET] Application s'arrête brutalement, que faire?
    Par joujoukinder dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/10/2009, 10h39
  2. Tests automatiques de mon application GTK sans la modifier
    Par j0n47h4n dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 02/01/2009, 16h28
  3. Réponses: 2
    Dernier message: 12/09/2007, 22h42
  4. [EasyPHP] Pb lors de la fermeture de mon application avec ou sans fermeture de Easy Php
    Par Lolie11 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/06/2007, 10h38
  5. Réponses: 4
    Dernier message: 04/04/2004, 13h59

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