1. #1
    Membre actif
    Avatar de exe2bin
    Inscrit en
    mars 2009
    Messages
    419
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 419
    Points : 246
    Points
    246
    Billets dans le blog
    3

    Par défaut unchecked method invocation

    Bonsoir à toutes et tous ,
    la compilation de mon application se solde par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Note: Agenda.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Après re-compilation avec option la ligne fautive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort(l);
    l est une LinkedList déclarée pour une classes Evenement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LinkedList<Evenement> l = new LinkedList<Evenement>();
    Au final ,l'application fait ce qu'on attend d'elle mais j'aimerais pouvoir résoudre cela.
    Pourquoi ce Warning et comment le régler ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 013
    Points : 24 535
    Points
    24 535
    Billets dans le blog
    2

    Par défaut

    Salut,

    Tu peux montrer le code de la classe Agenda ? Parce qu'on obtient ce warning plutôt si on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LinkedList list = new LinkedList();
    Collections.sort(list);
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Avatar de exe2bin
    Inscrit en
    mars 2009
    Messages
    419
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 419
    Points : 246
    Points
    246
    Billets dans le blog
    3

    Par défaut

    Tout le code ?
    Non parce qu'elle fait presque 200 lignes ?!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 013
    Points : 24 535
    Points
    24 535
    Billets dans le blog
    2

    Par défaut

    Commençons pas la méthode où se trouve l'invocation de Collections.sort() alors.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Avatar de exe2bin
    Inscrit en
    mars 2009
    Messages
    419
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 419
    Points : 246
    Points
    246
    Billets dans le blog
    3

    Par défaut

    c'est tout d'un bloc alors voilà :
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
    public class Agenda {
        public static void main(String[] args) throws IOException {
     
            Scanner sc = new Scanner(System.in);
            LinkedList<Evenement> l = new LinkedList<Evenement>();
            LinkedList<Evenement> base = null;
            ListIterator li = null;
            ObjectOutputStream oss = null;
            ObjectInputStream ois = null;
            boolean escapeFromMainMenu = false;
            String ligne = "eviv bulgroz !";
            char choix = '&';
     
            while(true) {
                if(!escapeFromMainMenu) {
                    System.out.println("=============================|  MENU  |==================================");
                    System.out.println("|===  1) Nouvel Evènement.             8) Liste des Evènements.       ===|");
                    System.out.println("|===  6) Trier les Evènements.         5) Enregistrer les Evènements. ===|");
                    System.out.println("|===------------------------------------------------------------------===|");
                    System.out.println("|===  2) Charger une base.             4) Consulter une base.         ===|");
                    System.out.println("|===  3) Fusionner la base.                                           ===|");
                    System.out.println("|                             7) QUITTER                                 |");
                    System.out.println("=========================================================================");
                    System.out.print("Votre choix : ");
                    while((ligne = sc.nextLine()).length() == 0) ;
                    choix = ligne.charAt(0);
                }
                switch(choix) {
    // Création et mise en liste d'un Evenement
                        case '1':
                        l.add(new Evenement(sc));
                        break;
    // Charger une base
                        case '2':
                        System.out.print("&#10067;&#10067;&#10067; nom de la base  : ");
                        ligne = sc.nextLine();
                        try {
                            ois = new ObjectInputStream(new FileInputStream(new File(ligne)));
                            base = new LinkedList<Evenement>();
                            do {base.add((Evenement)ois.readObject());} while(true);
                        } catch (EOFException e1) {
                            ;
                        } catch (ClassNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        } finally {
                            if(ois != null) {ois.close();}
                        }
                        break;
    // Fusion de la base et des Evènements
                        case '3':
                        if(base == null) {System.out.print("&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;  Il vous faut charger une base avant de la fusionner   &#9940;&#65039;&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;");sc.nextLine();break;}
                        System.out.print("&#9888;&#65039;&#9888;&#65039;&#9888;&#65039;  ATTENTION ! TOUS les évènements seront fusionnés ! VALIDATION ? ");
                        if(!(sc.nextLine()).equals(VALIDATION_CODE)) {System.out.println("&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;  Bad validation code  &#9940;&#65039;&#9940;&#65039;&#9940;&#65039;");break;}
                        l.addAll(base);
                        System.out.println("&#9989;  Fusion réalisée .");
                        break;
    // Visualisation de la base
                        case '4':
                        if(base == null) {System.out.print("&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;  Il vous faut charger une base avant de la visualiser  &#9940;&#65039;&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;");sc.nextLine();break;}
                        li = base.listIterator();
                        int i = 1;
                        boolean control = false;
                        while(li.hasNext()) {
                            control = false;
                            System.out.println(i + ") " + li.next().toString());
                            if(i % MAX_VISIBLE_EVENEMENT == 0) {
                                control = true;
                                System.out.print(" -- Appuyer sur une Return pour continuer ...");
                                sc.nextLine();
                            }
                            i++;
                        }
                        if(!control) {System.out.print(" -- Appuyer sur une Return pour continuer ...");sc.nextLine();}
                        break;
    // Visualisation de la liste des Evenement
                        case '8':
                        if(l.isEmpty()) {escapeFromMainMenu = false;break;}
                        ligne = visualisation(l,sc);
                        switch(ligne.charAt(0)) {
                            case 'D':
                                choix = '#';
                                escapeFromMainMenu = true;
                                break;
                            case 'C':
                                choix = '$';
                                escapeFromMainMenu = true;
                                break;
                            default:
                                escapeFromMainMenu = false;
                                break;
                        }
                        break;
                        case '7':
                        break;
    // Enregistrement
                        case '5':
                        if(l.isEmpty()) break;
                        System.out.print("&#9888;&#65039;&#9888;&#65039;&#9888;&#65039;  ATTENTION ! TOUS les évènement seront enregistrés ! VALIDATION ? ");
                        if(!(sc.nextLine()).equals(VALIDATION_CODE)) {System.out.println("&#9940;&#65039;&#9940;&#65039;&#9940;&#65039;  Bad validation code  &#9940;&#65039;&#9940;&#65039;&#9940;&#65039;");break;}
                        System.out.print("Donner un nom à votre base ? ");
                        ligne = sc.nextLine();
                        try {
                            oss = new ObjectOutputStream(new FileOutputStream(ligne));
                            li = l.listIterator();
                            while(li.hasNext()) {oss.writeObject(li.next());}
                            oss.flush();
                            System.out.println("&#9989;  Enregistrement éffectué .");
                        } catch (final java.io.IOException e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                if(oss != null) {
                                    oss.flush();
                                    oss.close();
                                }
                            } catch (final IOException ex) {
                                ex.printStackTrace();
                            }
                        }
                        break;
    // Trier les Evènements
                        case '6':
                        if(l.isEmpty()) {System.out.println("&#10067;&#10067;&#10067;&#10067;  Aucun évènement à trier   &#10067;&#10067;&#10067;");break;}
                        Collections.sort(l);
                        System.out.println("&#9989;  Liste triée .");
                        break;
    // Edition d'un Evenement
                        case '$':
                        if(escapeFromMainMenu){
                            int index = 0;
                            if(ligne.length() > 1) index = Integer.parseInt(ligne.substring(1));
                            else {escapeFromMainMenu = false;break;}
                            if(index<=l.size() && index>=0) {
                                (l.get(index-1)).setEvent(sc);
                                choix = '8';
                            }
                            else escapeFromMainMenu = false;
                        }
                        break;
    // Supprime un Evenement de la liste
                        case '#':
                        if(escapeFromMainMenu) {
                            int index = 0;
                            if(ligne.length() > 1) index = Integer.parseInt(ligne.substring(1));
                            else {escapeFromMainMenu = false;break;}
                            if(index<=l.size() && index>=0) {
                                l.remove(index-1);
                                choix = '8';
                            }
                            else escapeFromMainMenu = false;
                        }
                        break;
                    default:
                    break;
                }
                if(choix == '7') break;
            }
        }
    ligne 129

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 013
    Points : 24 535
    Points
    24 535
    Billets dans le blog
    2

    Par défaut

    Et la classe Evenement, tu peux montrer juste la première ligne ? Genre, ce ne serait pas public class Evenement<T> implements Comparable<Evenement<T>> { ?
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre actif
    Avatar de exe2bin
    Inscrit en
    mars 2009
    Messages
    419
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 419
    Points : 246
    Points
    246
    Billets dans le blog
    3

    Par défaut

    Pas du tout !!!
    C'est plutôt du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Evenement implements Serializable,Comparable {

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 013
    Points : 24 535
    Points
    24 535
    Billets dans le blog
    2

    Par défaut

    Le souci est là.

    Compare.sort() attends un List<T> tel que <T extends Comparable<? super T>. Ce qui n'est pas le cas de Evenement. Le warning le signale donc.
    Normalement, un Evenement doit être comparé avec un Evenement, pas avec autre chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Evenement implements Serializable, Comparable<Evenement>
    .
    le super tolère les classes parentes. Donc éventuellement on pourrait avoir public class Evenement implements Serializable, Comparable<Serializable>, ou public class Evenement implements Serializable, Comparable<Object>, et ne pas déclencher le warning sur Collections.sort, mais ça n'aurait pas vraiment de sens pour instaurer une relation d'ordre aux évenements. Et au final, c'est bien une liste d'Evenement que tu tries.

    Par ailleurs, juste un truc, ça me semble étrange le setEvent(Scanner), et potentiellement source de dysfonctionnement et d'exception : je ne sais pas ce que tu fais sur l'instance de Scanner dans l'evenement, mais tu engages potentiellement une lecture multiple d'un tampon unique (celui du Scanner).
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre actif
    Avatar de exe2bin
    Inscrit en
    mars 2009
    Messages
    419
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 419
    Points : 246
    Points
    246
    Billets dans le blog
    3

    Par défaut

    Merci pour ton analyse Joel;
    ta compréhension dépasse mon entendement.
    Je vais dormir maintenant ,je verrais à corriger demain.
    Re-mrci.

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

Discussions similaires

  1. [RMI] Le fonctionnement de RMI (Remote Method Invocation)
    Par Alain Defrance dans le forum Java EE
    Réponses: 17
    Dernier message: 15/05/2011, 16h39
  2. RMI (Remote Method Invocation) Connection timed out
    Par xasha dans le forum Langage
    Réponses: 8
    Dernier message: 03/12/2009, 13h00
  3. Invocation automatique de methode static
    Par nuriel2 dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2008, 19h19
  4. Réponses: 0
    Dernier message: 17/07/2008, 12h21

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