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

JavaFX Discussion :

Repercution d'erreur dans un try/catch


Sujet :

JavaFX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Points : 66
    Points
    66
    Par défaut Repercution d'erreur dans un try/catch
    Bonjour,

    Voilà j'ai un problème. J'utilise jdbc pour pour connecter mon programme à ma base de donnée. Si jamais je perds la connection à ma base de donnée j'ai une fonction dans une classe java qui m'affiche un message d'erreur dans une pop-up.
    Le problème c'est que lorsque je fais des requete dans mes classe javafx, s'il ya une perte de connection à la base, la fenêtre pop-up va s'afficher pour chacune de mes requetes. En gros l'execution va se poursuivre. Or, je voudrais que cette erreur se repercute dans les try ou catch que j'utilise dans mes classe javaFX.

    Ma fonction qui indique la perte de connection:
    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
     
    public void connection( String login, String mdp )
        {
            /** Verification si le pilote est installé */
            try{
     
                Class.forName("com.mysql.jdbc.Driver");
            }
            catch(Exception E)
            {
                System.err.println("Il n'y a pas de pilote");
            }
     
            /** Connexion à la base de donnée */
            try
            {
     
                String url = "jdbc:mysql://localhost/lsis";
                connect = DriverManager.getConnection(url, login, mdp);
     
            }
            catch(SQLException E)
            {
                System.err.println(E.getMessage());
                Alert.inform(E.getMessage()+"\n\nPerte de la connection à la base de donnée.\nVeuillez réassayer plus tard.");
            }
     
        }
    Un exemple de fonction d'une de mes classes javaFx ou je lance des requetes:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    function bouton_connectAction(): Void {
     
            var mdp_crypt: String;
            var res:ResultSet;
            var Results:String = "";
            var nom_u:String = "";
            var mdp_u:String = "";
     
            /** création d'instances de mes classes java */
            def crypt : GenerationMdp = new GenerationMdp();
            def u_nom : Sessions = new Sessions();
     
            /** Récupération des valeur du textboxt mot de passe et nom
             * .trim() afin de ne pas prendre en compte les espaces en fin de chaine
             * de caractères
             */
            var mdp:String = bind mdp_text.text;
            var nom:String = bind nom_text.text.trim();
     
            /**
             * cryptage du mot de passe
             * afin de pouvoir faire la comparaison avec celui crypté dan sla base de donnée
             */
            mdp_crypt= crypt.Cryptage(mdp);
     
            /**
             * Création de ma requete
             * On cherche si le nom et le mot de passe sont bien inscrit dans la base de donnée
             */
            var marequete:String = "SELECT id_utilisateur, motDePasse FROM utilisateur WHERE id_utilisateur LIKE '{nom}' AND motDePasse LIKE '{mdp_crypt}'";
     
            try
            {
                 /** Envoi de la requete de sélection */
                 res = resultat.Result_requete_selection(marequete);
                 if(res.first())                    // on se positionne sur le 1er enregistrement
                 {
                     nom_u = res.getString(1);
                     mdp_u = res.getString(2);
                 }
                 /**
                  * Si le mot de passe et le login sont correct
                  * affichage du menu sinon
                  * affichage d'un message d'erreur
                  */
                 if("{nom_u} {mdp_u}" != "{nom} {mdp_crypt}")
                 {
                    Alert.inform("Votre nom d'utilisateur et/ou votre mot de passe sont incorect.\nVeuillez les retaper.");
                 }
                 else
                 {
     
                    /** enregistre l'identifiant de l'utilisateur courant dans la classe Sessions */
                    u_nom.setNom(nom);
     
                    /** Recuperation des droits de l'utilisateur courant */
                    marequete= "SELECT droit_profil FROM profil_utilisateur P INNER JOIN utilisateur U ON P.id_profil = U.id_profil WHERE id_utilisateur LIKE '{nom}'";
                    res = resultat.Result_requete_selection(marequete);
                    if(res.first())
                    {
                        Results = res.getString(1);
                    }
     
                    u_nom.setProfil(Results);
     
                    /** Recuperation de la date de la dernière connexion et envoi de ces infos à la classe "Sessions" */
                    marequete= "SELECT DATE_FORMAT(date_connection, GET_FORMAT(TIMESTAMP,'ISO')) FROM utilisateur WHERE id_utilisateur LIKE '{nom}'";
                    res = resultat.Result_requete_selection(marequete);
                    if(res.first())
                    {
                        Results = res.getString(1);
                    }
                    u_nom.setDate(Results);
     
                    /** envoie dans la base de données de la nouvelle date et heure de connection */
                    marequete = "UPDATE utilisateur set date_connection = NOW() WHERE id_utilisateur LIKE '{nom}'";
                    resultat.Result_requete_insertion(marequete);
     
     
                   /** ouverture de la fenêtre de Menu */
                    var design = Menus{};
                    design.affichageMenu();
     
                   /** fermeture de la fenêtre de connexion */
                    scene.stage.close();
     
                }
     
            }
            catch (Exception)
            {
                System.err.println(Exception.getMessage());
            }
     
         }
    Pourriez-vous m'aider?

    Merci d'avance

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Février 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 284
    Points : 409
    Points
    409
    Par défaut
    Je comprend pas trop ton problème.
    Dans tous les cas le try catch fonctionne de la même manière en java et javaFX.
    Le mieux serait peut être que dans tes classes java tu mette des thows et que tu récupères les erreurs dans ton code javaFX avec try catch.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je ne sais pas comment tu fais tes appels (vu que tu ne nous montres presque jamais de code ) mais javafx.async.JavaTaskBase dispose d'un champs causeOfFailure qui permet de faire remonter une exception (ou autre) au niveau de la GUI.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try{
     
                Class.forName("com.mysql.jdbc.Driver");
            }
            catch(Exception E)
            {
                System.err.println("Il n'y a pas de pilote");
            }
    est très mauvais, car tu catch tout et tu affiches une erreur qui ne correspond pas forcement.
    En théorie il faut catcher spécifiquement les bonnes exceptions sous peine de perdre la nature même de l'exception. Pour le reste des Runetime, il te faut hériter d'une superclasse dédiée qui va les traiter, ou alors simplement les afficher dans le pire des cas.


    Plus précisement Class.forName retourne une ClassNotFoundException, c'est ça qu'il faut catcher pour faire du code propre. Catcher Exception au sens large est assez laid.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 122
    Points : 66
    Points
    66
    Par défaut
    Merci beaucoup de votre aide

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

Discussions similaires

  1. Erreur dans un try catch
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 03/04/2011, 02h48
  2. Gestion des erreurs avec le try catch
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 8
    Dernier message: 03/03/2010, 10h22
  3. Code erreur d'un Try, Catch (exception e)
    Par davelop dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 06/10/2008, 19h00
  4. Erreur, même dans un try-catch
    Par TheCool dans le forum C#
    Réponses: 3
    Dernier message: 06/03/2008, 19h26
  5. Réponses: 3
    Dernier message: 12/12/2006, 18h58

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