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

avec Java Discussion :

Problème NullPointerException


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Par défaut Problème NullPointerException
    Bonjour, je suis débutante en Java et je dois créer une bataille navale pour mon école !

    J'ai actuellement 7 classes (Grille de Jeu, Joueur, Navires, Liste coordonnées, Nœud liste coordonnées, Liste Navires, Nœud Liste Navires).
    Je fais, à a fin de chaque classe, un main de test de méthode. Et pour le main de Liste Navires j'ai une Erreur :
    Voici mon main : Nom : main Liste Nav.png
Affichages : 295
Taille : 25,2 Ko

    et voici l'erreur que cela me renvoi :
    Exception in thread "main" java.lang.NullPointerException
    at BatNav.Joueur.RemplirListeBateau(Joueur.java:40)
    at BatNav.Joueur.<init>(Joueur.java:26)
    at BatNav.ListeNav.main(ListeNav.java:149)

    J'ai donc été voir la ligne 40 de joueur qui est dans mon programme de remplissage de la liste de navire :
    Nom : RemplirListe.png
Affichages : 247
Taille : 27,2 Ko

    et la je ne vois pas où est l'erreur.. J'ai essayé de modifier la manière d'écrire le nouveaux navires en mettant "Navires Torpilleurs ;" puis "Torpilleur =...; " cela n'a rien changé.. Du coup je me suis dis que cela venait peut être de mon nœud vide ("ListeCo.AjoutCoordFinVide()") dans lequel je place un tableau[2][2] rempli de 0 .. J'ai donc supprimé mon initialisation dans la méthode mais cela ne change rien.

    Je ne sais donc pas dutout d'où vient mon erreur...

    Si vous pouviez m'aider ce serai vraiment super !
    Et n'hésitez pas à me demander des informations ou des morceaux de code supplémentaire, je n'ai aucune idée de e dont vous avez besoin !

    Laure

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    A vue de nez, on dirait que ta liste "listeCo" (d'ailleurs, changes tes variables pour que la première lettre soit une minuscule, les majuscules en début sont réservées au classes), est null, mais comme on n'a pas tout le code, c'est pas facile de savoir si oui ou non ça vient de là.

    Tu peux nous mettre le code de ta classe Joueur? (parce que je crois savoir ce qui ne va pas)

  3. #3
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Par défaut
    Merci d'avoir répondu aussi vite !
    EN effet ListeCo est null :

    Nom : joueur2.png
Affichages : 243
Taille : 15,1 Ko


    Mais du coup, si je ne dois pas la mettre null dans le constructeur, je ne l'initialise pas ?

    Laure

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Tu dois l'initialiser avec son constructeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.listeCo = new ListeCoord();
    Poste ton code dans une balise [code] en cliquant sur le bouton # sur l'éditeur.

  5. #5
    Membre averti
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Par défaut
    Donc, grâce à vos commentaires j'ai résolu ce problème et d'autres, mais j'ai de nouveau un problème de null pointer exception qui me fait littéralement péter un plomb .. lorsque je positionne mon navire, je fais en sorte de vérifier qu'il n'est pas sur un autre navire. Pour cela je récupère les coordonnées d'un navire en récupérant le navire dans la liste de navires et c'est la que ca ne va pas :
    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
    package BatNav;
     
    //Classe réalisée par Laure
     
    /*Méthode de la classe : 
     * 	- constructeur 
     * 	- getters and setters 
     * 	- méthode qui test si la liste est vide : vide()
     * 	- méthode qui ajoute un objet à la fin de la liste : AjoutNavFin(NodeNav N)
     * 	- méthode qui supprime un noeud de la liste : SuprNav(Navires N)
     * 	- méthode qui donne le nombre d'éléments de la liste : NbElement()
     * 	- méthode qui renvoi la valeur du ième élément de la liste : DonneElement()
     * 	- main de test de méthode
     */
     
    //Creation de la classe liste chainée qui recevra les différents types de Navires de chaque joueur 
    public class ListeNav {
     
    		private NodeNav premier; 
     
    		//constructeur
    		public ListeNav(){
    			this.premier=null;
    		}
     
     
    		//getters and setters
    		public NodeNav getPremier() {
    			return premier;
    		}
     
    		public void setPremier(NodeNav premier) {
    			this.premier = premier;
    		}
     
    		//méthode qui test si la liste est vide (on l'utilisera lorsqu'on testera si le joueur à gagner ou non)
    		//J'ai repris la métode du TD
    		public boolean vide(){
    			return premier == null; 
    		}
     
    		//Méthode qui ajoute un objet navire à la fin de la liste 
    		//J'ai repris la méthode du TD 
    		public void AjoutNavFin(Navires N) {
    			NodeNav NN= new NodeNav(N);
     
    			// cas particulier List vide
    			if (premier == null){
    				premier = NN;
    			}	
    			else {
     
    				//On créé Ncourant : noeud courant (noeud sur lequel nous menons l'étude à un moemnt donné)
    				NodeNav Ncourant = premier;
     
    				// avancer tant que suivant non null
    				while (Ncourant.getSuivant() != null) {
    					Ncourant = Ncourant.getSuivant();
    				}
     
    				// ici suivant est null
    				// on peut donc inserer le noeud N
     
    				Ncourant.setSuivant(NN);
    			}
    		}
     
    		//Méthode qui supprime un noeud de la liste
    		//Dans cette méthode, on cherche le noeud qui précède le noeud à supprimer
    		public void SuprNav(Navires N){
     
    			//cas de la liste vide 
    			if(vide()){
    				return;
    			}
     
    			else {
     
    				//le premier élément n'a pas d'élément qui le précède
    				//Son deuxième élèment est null donc on met le premier égal au deuxième 
    				//note : on pourrait mettre directement null, mais je garde ici la méthode utilisée dans le cas ou le premier élément est différent de la valeur voulue 
    				if (premier.getNavire()==N){
    					premier=premier.getSuivant();
    				}
    				else {
    					NodeNav Ncourant = premier; //On créé un noeud de "parcours" fictif, qu'on place sur le premier noeud (comme à la méthode précédente)
    					NodeNav SuivNcourant = premier.getSuivant(); //On référence également le noeud suivant le noeud de parcours
     
    					//On cherche à positionner SuivNcourant sur le noeud à supprimer 
    					while (SuivNcourant != null && SuivNcourant.getNavire() != N){
    						//note : attention à l'ordre ! 
    						Ncourant = SuivNcourant; 
    						SuivNcourant = SuivNcourant.getSuivant(); 
    					}
     
    					/* à la sortie de la boucle
    					 * soit il n'y avait pas de navire N et le "noeud suivant le noeud courant" est null
    					 * soit on est sur le noeud suivant le noeud courant contient la même chose que le noeud N
    					 */
     
    						if(SuivNcourant != null){
    							Ncourant.setSuivant(SuivNcourant.getSuivant());
    						}
    				}
    			}
    		}
     
    		//Méthode qui donne le nombre d'élément de la liste 
     
    		public int NbElement(){
    		//On traite le cas ou la liste est vide
    			if(vide()){
    				return 0;
    			}
     
    		    int i=1; //Variable nous servant à l'incrémentation
    			NodeNav Ncourant = premier;
     
    			while (Ncourant != null){
    				Ncourant = Ncourant.getSuivant();
    				i++;
    			}
    			return i; 
    		}
     
    		//Méthode qui me donne l'élément "i" de la liste
     
    		public Navires DonneElement(int i){
    			//System.out.println(i);
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());
    			//System.out.println(j);
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    A la ligne 140 il m'annonce un Null Pointer Exception... :
    Exception in thread "main" java.lang.NullPointerException
    at BatNav.ListeNav.DonneElement(ListeNav.java:144)
    at BatNav.Navires.positionnement(Navires.java:156)
    at BatNav.Joueur.RemplirListeBateau(Joueur.java:43)
    at BatNav.Joueur.<init>(Joueur.java:25)
    at BatNav.ListeNav.main(ListeNav.java:154)

    Je ne comprend pas pourquoi...
    Je joins également le code de positionnement relatif à Navires.Java : 156 (ligne 89 dans le code que je joins.. Donc a priori c'est le DonneElement(i) qui plante)
    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
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
     
    	//Méthode qui positionne les navires intelligemment
    	public int[][] positionnement() {
     
    		int TabEnregistrement[][] = new int[2][2];
     
    		if(this.HO==false){
     
    			int absAv=0;
    			int ordAv=0;
    			int absAr=0;
    			int ordAr=0;
    			int test = 1; // Sert à éliminer le cas ou les navires ont plusieurs cases en commun
    			int abs=0;
    			int ord=0;
    			int abs2=0;
    			int ord2=0;
    			int alpha=0;
     
    			// On place les cooronnées arrières du Navire + on vérifie que les coordonnées sont bien dans la grille
    			while(test==1){
    				System.out.println("Veuillez saisir l'abcisse de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    				absAr = sc.nextInt();
    				while (absAr< 0 || absAr>9){
    					System.out.println("Mauvaise saisie veuillez saisir l'abcisse de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    					absAr = sc.nextInt();
    				}
    				System.out.println("Veuillez saisir l'ordonnée de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    				ordAr = sc.nextInt();
    				while (ordAr< 0 || ordAr>9){
    					System.out.println("Mauvaise saisie veuillez saisir l'ordonnée de l'arrière de votre "+ this.nomNavire +" ("+ this.taille +" cases) (entre 0 et 9)");
    					ordAr = sc.nextInt();
    				}
     
    				// On propose les positions possibles pour l'avant du bateau en prenant en compte sa taille 
    				if (absAr+this.taille-1>9){
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr - this.taille+1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv!= (absAr - this.taille+1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (absAr - this.taille+1) +"ou"+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				else if(absAr-this.taille+1<0){
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv!= (absAr + this.taille -1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou "+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				else{
    					System.out.println("Veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou "+ (absAr - this.taille+1) +" ou "+absAr+".");
    					absAv = sc.nextInt();
    					while (absAv != (absAr + this.taille-1) && absAv!= (absAr - this.taille+1) && absAv!= absAr){
    						System.out.println("Erreur veuillez saisir l'abcisse de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : " + (absAr + this.taille-1) + " ou " + (absAr - this.taille+1) +" ou "+absAr+".");
    						absAv = sc.nextInt();
    					}
    				}
    				if (absAr==absAv){
    					if (ordAr+this.taille-1>9){
    						ordAv=ordAr - this.taille+1;
    						System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    					}
    					else if (ordAr-this.taille+1<0){
    						ordAv=ordAr + this.taille-1;
    						System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    					}
    					else{
    						System.out.println("Veuillez saisir l'ordonnée de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (ordAr - this.taille+1) +" ou "+(ordAr + this.taille-1)+".");
    						ordAv = sc.nextInt();
    						while (ordAv!= ordAr - this.taille+1 && ordAv!= ordAr + this.taille-1 ){
    							System.out.println("Erreur veuillez saisir l'ordonnée de l'avant de votre "+ this.nomNavire +" ("+ this.taille +" cases) parmis les proposition suivante : "+ (ordAr - this.taille+1) +" ou "+(ordAr + this.taille-1)+".");
    							ordAv = sc.nextInt();
    						}
    					}
    				}
    				else{
    					ordAv=ordAr;
    					System.out.println("L'ordonnée de l'avant de votre bateau est "+ordAv+".");
    				}
     
     
    				// On test si le navire a des coordonnées en commun avec d'autres Navires existants
     
    				//Tout d'abord on verifie les navires verticaux en remontant/descendant les cases du bateau une par une
            		if(!(this.J.getListeBat().vide())){
        				for(int i=0; i<this.J.getListeBat().NbElement(); i++){
         					if (this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]==this.J.getListeBat().DonneElement(i).getTabCoord()[1][0]){
     							abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0];
    							for(int k=0;k<this.J.getListeBat().DonneElement(i).getTaille();k++){
    								if(this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]<this.J.getListeBat().DonneElement(i).getTabCoord()[1][1]){
    									ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]+k;
    								}
    								else{
    									ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]-k;
    								}
    								if(absAv<absAr){
    									abs2=absAv+k;
    								}
    								else if (absAv>absAr){
    									abs2=absAv-k;		
    								}
    								//Attention le cas d'égalité était oublié ! 
    								else if (absAv==absAr){
    									abs2=absAv;
    								}
    								if(ordAv<ordAr){
    									ord2=ordAv+k;
    								}
    								else if (ordAv>ordAr){
    									ord2=ordAv-k;	
    								}
    								else if (ordAv==ordAr){
    									ord2=ordAv;
    								}
    								if (abs==abs2 && ord==ord2){
    									alpha=1;
    								}
    							}
    						}
     
         					//Puis les navires horizontaux 
    						if (this.J.getListeBat().DonneElement(i).getTabCoord()[0][1]==this.J.getListeBat().DonneElement(i).getTabCoord()[1][1]){
    							ord=this.J.getListeBat().DonneElement(i).getTabCoord()[0][1];
    							for(int k=0;k<this.J.getListeBat().DonneElement(i).getTaille();k++){
    								if(this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]<this.J.getListeBat().DonneElement(i).getTabCoord()[1][0]){
    									abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]+k;
    								}
    								else{
    									abs=this.J.getListeBat().DonneElement(i).getTabCoord()[0][0]-k;
    								}
    								if(absAv<absAr){
    									abs2=absAv+k;
    								}
    								else if (absAv>absAr){
    									abs2=absAv-k;		
    								}
    								//Attention le cas d'égalité était oublié ! 
    								else if (absAv==absAr){
    									abs2=absAv;
    								}
    								if(ordAv<ordAr){
    									ord2=ordAv+k;
    								}
    								else if (ordAv>ordAr){
    									ord2=ordAv-k;	
    								}
    								else if (ordAv==ordAr){
    									ord2=ordAv;
    								}	
    									if (abs==abs2 && ord==ord2){
    										alpha=1;
    								    }
    							}
    					   }
    				  }
    				  if (alpha==1){
    					  System.out.println("Votre "+this.nomNavire+" a une ou plusieur case en commun avec un navire déjà existant.");
    					  test=1;
    				  }
    					else {
    						test=0;
    					}
    				}
    				  else {
    					  test=0;
    				  }
    			}
     
    				  TabEnregistrement[0][0] = absAv;
    				  TabEnregistrement[0][1] = ordAv;
    				  TabEnregistrement[1][0] = absAr;
    				  TabEnregistrement[1][1] = ordAr;
    					return TabEnregistrement;
    				}
    			else{
    					TabEnregistrement=TabCoord;        		
    		}
    		return TabCoord;
    	}
    Si je résume ce qu'il se passe :
    Je créé mon torpilleur, il se place dans le premier nœud de ma liste (je l'ai vérifié), puis je créé mon cuirasse1 mais sur des coordonnées de torpilleur et c'est la que ça plante... Il reste un certain temps en dehors de la boucle while du donneelement(i) mais il fini par y rentrer je ne sais pour quelle raison ..

    HELP !

    Laure
    Images attachées Images attachées  

  6. #6
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    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
     
    public Navires DonneElement(int i){
    			//System.out.println(i);
    		//On traite le cas ou la liste est vide
    			if(vide()){
    			System.out.println("La liste est vide");
    			}
     
    			int j = 0;
    			NodeNav Ncourant = new NodeNav(getPremier().getNavire());//getPremier() renvoie null ici, il n'est pas instancié quand ta liste est vide
    			//System.out.println(j);
    			while (j!=i){
    					//System.out.println("rentré dans le while");
    				Ncourant=Ncourant.getSuivant();
    				j++;
    				//System.out.println(j);
    				}
    		    return Ncourant.getNavire();	
    		}
    Réponse en commentaire

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

Discussions similaires

  1. Problème NullPointerException
    Par sarra7 dans le forum Android
    Réponses: 2
    Dernier message: 01/05/2015, 17h18
  2. Réponses: 15
    Dernier message: 13/02/2015, 17h04
  3. Problème NullPointerException en POST mais pas en GET
    Par Tonyo38 dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 03/07/2014, 09h35
  4. Comment résoudre le problème : NullPointerException
    Par ABS_AGH dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/01/2014, 15h56
  5. [JNI] Problème NullPointerException
    Par jabesq dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 08/07/2009, 10h22

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