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 :

Ancienne appli java pb avec this


Sujet :

Java

  1. #1
    nma
    nma est déconnecté
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Points : 108
    Points
    108
    Par défaut Ancienne appli java pb avec this
    Bonjour @ tous,

    J'ai une ancienne appli java dev il y a un peu plus de 5 ans que je souhaite modifié et réutilisé bien sur.

    Cependant il semblerait (n'ayant pas utilisé java depuis) que le mots clef this génère des erreurs (warning).

    exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JOptionPane.showMessageDialog(this,"Im
    Il semblerait que je puisse remplacer celui du joptionpane par null
    Par contre pour les autres seulement les enlever ?

    Je n'ai aucune idée des conséquence de ces modif.

    EDIT
    Il semblerait que la gestion des erreurs ai changé aussi

    Si vous pouviez m'eclairé
    Merci de votre aide
    Nicolas

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Alors euh... "this" n'a pas changé depuis... la nuit des temps
    La gestion des exception s'est un peu enrichie en java 8, mais rien de révolutionnaire non plus... ça a d'ailleurs toujours été plutôt mauvais de catcher "Exception" (mais moins grave que catcher Throwable)

    On peut avoir plus d'infos? genre un bout de code complet, un détail des erreurs/warnings, 'fin bref le minimum légal

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    nma
    nma est déconnecté
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Points : 108
    Points
    108
    Par défaut
    Merci de ton interet,

    En fait le code est exécutable tout fonctionne ....

    C'est netbean qui me signale ces warning !!

    J'ai des petites ampoules jaunes avec un trianle sur tout un tas de truc.
    Des variables, des boucle for, tous les catch(Exception e)

    Il semblerait que cela n’empêche pas l'appli de fonctionné, mais j'aimerais comprendre.
    Cette appli comprend une trentaine de fichier. je vous met une fonction (en gras les ampoules warning !!)
    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
    private void majDuree(String heuredeb,String heurefin) {
            // Calcul de la duree de la vacation max 24h
            int duree,dureeJour,dureeNuit;
            duree = dureeJour = dureeNuit = 0;  (never used ca je comprend a peu pret ;) , sauf que je l'utilise !!)
            duree = this.calculDuree(heuredeb, heurefin);
            
            int dhdeb = this.calculNbSeconde(heuredeb);
            int dhfin = this.calculNbSeconde(heurefin);
            dhfin = dhfin<dhdeb?dhfin+86400:dhfin;
            int ddebutheurenuit = this.calculNbSeconde(debutheurenuit);
            int dfinheurenuit0,dfinheurenuit;
            dfinheurenuit0 = dfinheurenuit = this.calculNbSeconde(finheurenuit);
            if(dfinheurenuit<ddebutheurenuit) {
                dfinheurenuit = dfinheurenuit+86400;
            }
            
            //JOptionPane.showMessageDialog(this,"deb : "+dhdeb + "\nfin : "+dhfin+"\nNuit : "+ddebutheurenuit + " - " +dfinheurenuit,"Durees",JOptionPane.INFORMATION_MESSAGE);
            if (dfinheurenuit != dfinheurenuit0 && dhdeb < dfinheurenuit0) {
                if(dhfin<=dfinheurenuit0) {
                    dureeJour = 0;
                    dureeNuit = dhfin - dhdeb;
                } else if(dhfin > dfinheurenuit0 && dhfin <= ddebutheurenuit) {
                    dureeJour = dhfin - dfinheurenuit0;
                    dureeNuit = dfinheurenuit0 - dhdeb;
                } else if(dhfin > ddebutheurenuit && dhfin <= dfinheurenuit) {
                    dureeJour = ddebutheurenuit - dfinheurenuit0;
                    dureeNuit = (dfinheurenuit0 - dhdeb) + (dhfin - ddebutheurenuit);
                } else if(dhfin > dfinheurenuit) {
                    dureeJour = (ddebutheurenuit - dfinheurenuit0) + (dhfin - dfinheurenuit);
                    dureeNuit = (dfinheurenuit - ddebutheurenuit) + (dfinheurenuit0 - dhdeb);
                }else {
                    dureeJour = dureeNuit = 0;
                }
                
            } else {
                if(dhdeb<ddebutheurenuit) {
                    if(dhfin <= ddebutheurenuit) {
                        dureeJour = dhfin - dhdeb;
                        dureeNuit = 0;
                    } else if(dhfin > ddebutheurenuit && dhfin <= dfinheurenuit) {
                        dureeJour = ddebutheurenuit - dhdeb;
                        dureeNuit = dhfin - ddebutheurenuit;
                    } else if (dhfin > dfinheurenuit) {
                        dureeJour = (ddebutheurenuit - dhdeb) + (dhfin - dfinheurenuit);
                        dureeNuit = dfinheurenuit - ddebutheurenuit;
                    } else {
                        dureeJour = dureeNuit = 0;
                    }
                    
                } else {
                    if(dhfin <= dfinheurenuit)  {
                        dureeJour = 0;
                        dureeNuit = dhfin - dhdeb;
                    } else if (dhfin > dfinheurenuit) {
                        dureeJour = dhfin - dfinheurenuit;
                        dureeNuit = dfinheurenuit - dhdeb;
                    } else {
                        dureeJour = dureeNuit = 0;
                    }
                }
            }
            String req = "UPDATE vacations SET totalheure="+transformSecond(duree);    (Local variable hides a field :  ?????)
            req += ",totaljour="+transformSecond(dureeJour);
            req += ",totalnuit="+transformSecond(dureeNuit);
            req += " WHERE idposte="+idposte+" AND idsite="+idsite+" AND idvacation="+idvacation;
            //JOptionPane.showMessageDialog(this,req,"",JOptionPane.INFORMATION_MESSAGE);
            //Mise a jour de la base de données
            try {
                int res = connection.updateSql(req);
                //JOptionPane.showMessageDialog(this,req,"",JOptionPane.INFORMATION_MESSAGE);
                if(!(res>=0))
                    JOptionPane.showMessageDialog(this,this.connection.getErreurSql(),"erreur classe connection",JOptionPane.INFORMATION_MESSAGE);
            } catch (Exception e) {   The catch(java.lang.Exception) is too broad, the actually caught exception is java.awt.HeadlessException
                JOptionPane.showMessageDialog(this,e.toString(),"erreur",JOptionPane.INFORMATION_MESSAGE); }
            if (transformSecond(duree)>this.connection.getVacmax())
                JOptionPane.showMessageDialog(this,"La durée de la vacation est supérieure à la limite autorisée\nLimite : "+this.connection.getVacmax(),"Durée vacation trop longue",JOptionPane.WARNING_MESSAGE);
            
            this.initTableVacation();
            
        }
    Pour les this, ils ont disparue j'ai due de-valider le warning et je ne sais pas le remettre :

    Dans Menu Outils ->> Option ->> Editeur ->> onglet Indices

    Il semblerait y avoir tout un tas.

    Merci de vos conseil

    Nicolas

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Ha oui, boa ça ça dépend des paramètres de compilation...

    Personnellement, je laisserais tout activé, un warning pour moi c'est juste une erreur non fatale...

    Après je peux te les expliquer un par un si tu veux

    Par exemple, cacher exception ou Throwable, c'est mauvais, il faut toujours essayer de catcher le type le plus spécifique, quitte à devoir multiplier les catch. La raison ? En catchant exception, tu intercepte également toutes les runtime exception (nullpointer, arrayindexoutofbounds, etc.) ce qui n'est probablement pas ce que tu souhaites. En catchant Throwable, c'est encore pire, tu récupères également toutes les error (assertionerror, outofmemory, etc.)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Never used: un des champs est défini, mais jamais utilisé en lecture, donc jamais exploité...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Foo {
        private int i=0;
        public void bar(){
            i=4; // écriture
            // i n'est finalement pas utile, on peut le virer sans changer le résultat du programme
        }
    }

    Local variable hides a field: un champ de classe porte le même nom qu'une de tes variable locale. il devient difficile (voir impossible) d'accéder au champ de la classe. par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Foo {
        private int i=0;
        public void bar(){
          int i = 0; // déclare une nouvelle variable qui a le même nom qu'un champ de la classe
     
          // si je voulais imprimer la valeur du champ i, je devrais faire comme ceci:
          System.out.println(this.i);
        }
    }
    The catch(java.lang.Exception) is too broad, the actually caught exception is java.awt.HeadlessException: tu peux remplacer "Exception" dans le catch par "HeadlessException" sans changer le comportement du programme, mais en étant plus propre dans la gestion des erreurs (comme indiqué précédemment, Exception ne devrait jamais être catché)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    nma
    nma est déconnecté
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Points : 108
    Points
    108
    Par défaut
    OK Merci de ces précisions.

    Je vais essayer de faire le ménage (il y en a un sacré paquet ...... j'ai honte !)

    Et si un warning me pose problème je me permettrais de revenir vers vous !!

    Nicolas

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    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 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Je met les explications au fur est à mesure:


    never used: tu assigne 0 à duree. Pourtant la ligne suivante, tu assigne une autre valeur. Le 0 n'est donc jamais utilisé et inutile. Ca reviens à écrire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int duree=0;
    duree=1;
    Le 0 n'a pas de sens

    "Local variable hides a field" -> Tu définis une variable locale req. Mais tu as aussi un champs appelé "req" dans ta classe. Le compilateur t'indique que c'est embrouillant pour quelqu'un qui doit lire ton code en cours de route. Personellement, je désactive ce genre de warning, car je cache souvent mes fields dans mes setters :p


    "The catch(java.lang.Exception) is too broad, the actually caught exception is java.awt.HeadlessException" -> C'est une mauvaise pratique de catcher des Exception aveuglément. Tu risque d'attraper des Exceptions que tu es incapable de gérer. En l'occurence ici, la seule Exception qui a beaucoup de chances de remonter c'est HeadlessException qui signifie "pas d'interface graphique disponible". Et qu'est-ce que tu fais? Tu tente d'afficher dedans une boite de dialogue.... Tu vois, t'es incapable de la gérer, alors laisse la remonter ou traite la correctement

    La pluspart des warning sont surtout liés à des bonnes pratiques de programmation. Parfois c'est plus pertinent et te met le nez dans un truc qui va compiler mais pêter au runtime. Donc ça reste bien utile. Faut juste doser.

    Bonne continuation.

Discussions similaires

  1. Connecter appli AIR client avec JAVA client
    Par Space23 dans le forum Flex
    Réponses: 1
    Dernier message: 14/04/2011, 15h19
  2. créer une routine d'installation pour appli java avec netbeans
    Par dummygreg dans le forum NetBeans Platform
    Réponses: 3
    Dernier message: 23/07/2009, 23h12
  3. COMPATIBILITé JBOSS avec appli java 1.4.2
    Par kinnex91 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 21/11/2008, 17h59
  4. Package MSI avec ancienne appli VB6 ayant déjà une install Wise
    Par EMC51 dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 23/08/2007, 11h07
  5. [Plugin][Débutant] Lancement d'une appli Java avec un plugin
    Par antares24 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 29/07/2004, 14h18

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