Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoi d'un objet d'1 Serveur vers 1 Client

Erreur ClassNotFoundException

Sujet résolu
    18 février 2009 à 13:41:40

    Avant toute chose, il faut savoir que:

    J'ai créé une classe "Sabot" qui représente un jeu de poker (tableau de 52 cartes, plus un pointeur) avec des méthodes telles que "melanger", "extraireCarte" etc...

    J'ai créé une classe "Hand" qui représente une main de poker (tableau de 5 cartes) avec des méthodes telles que "AfficheHand" pour afficher la main, "TrierCarteCroissant" pour trier les cartes de la main, ou "Test" pour évaluer la combinaison (paire, brelan, suite, couleur etc...)

    Je vous joins ces 2 classes (pour info, je ne pense pas que mon problème provienne de ces classes, donc pas besoin de trop s'intéresser à ces classes)

    classe SABOT
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerserveur;
    
    /**
     *
     * @author Johann
     */
    public class Sabot {
        
        
        
        public String[]jeu;
        private int pointeur;
        
        
        
        
        public Sabot() {
            
           jeu = new String[52];
           String valeur = null;
           
           for (int i = 0; i < 13; i++){
               
               if ( (i+2) < 10){
                   
                   valeur = ( "0" + (i+2) );
               }
               
               else {
                   
                  valeur = ("" + (i+2) );
                          
               }
               
               jeu[i] = ( valeur + "C" );
               jeu[i + 13] = ( valeur + "D" );
               jeu[i + 26] = ( valeur + "H" );
               jeu[i + 39] = ( valeur + "S" );
               
           }
           
           this.pointeur = 0; 
           
        }
        
        
        public void Affiche(){
            
           for (int i = 0; i < 52; i++){ 
            
           System.out.println(jeu[i]); 
           
           
           } 
            
        }
        
        
        
        
        public void Melanger() {
            
           int a;
           int b;
           String temp = new String();
            
           
           for (int i = 0; i < 1000; i++){
           
           a = (int)( Math.random() * 52 );
           b = (int)( Math.random() * 52 );
           
           temp = jeu[a];
           jeu[a] = jeu[b];
           jeu[b] = temp;
           
           }
            
            
        }
        
        
        public String[] getJeu(){
            
            return this.jeu;
            
        }
        
        
        public int getPointeur(){
            
            return this.pointeur;
            
        }
        
        
        
        
        public String ExtraireCarte(){
            
            String carteExtraite = new String();
            String[] tableau;
            int ptr;
            
            ptr = getPointeur();
            tableau = getJeu();
            
            carteExtraite = tableau[ptr];
            pointeur ++;
            
            
            return (carteExtraite);
            
            
        }
        
        
        public void Reinitialiser(){
            
          String valeur = null; 
            
          for (int i = 0; i < 13; i++){
               
               if ( (i+2) < 10){
                   
                   valeur = ( "0" + (i+2) );
               }
               
               else {
                   
                  valeur = ("" + (i+2) );
                          
               }
               
               jeu[i] = ( valeur + "C" );
               jeu[i + 13] = ( valeur + "D" );
               jeu[i + 26] = ( valeur + "H" );
               jeu[i + 39] = ( valeur + "S" );
               
           }  
            
          this.pointeur = 0;
          
        }     
          
            
     }
    



    Classe HAND

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerclient;
    
    import java.io.*;
    
    /**
     *
     * @author Johann
     */
    public class Hand implements Serializable {
        
        private String[] board;
        
        
        public Hand(Sabot s){ /* Constructeur par initialisation */
            
            board = new String[5];
            
            s.Melanger();
            for (int i = 0; i < 5; i++){
                
                board[i] = s.ExtraireCarte();
                    
            }
            
        }
        
        
        public Hand(){ /* Constructeur par défaut SPECIAL */
            
            /* Ce constructeur sert à créer une main précise, utile pour faire les tests */
            
            board = new String[5];
            /* ATTENTION A BIEN METTRE LES CARTES DANS L'ORDRE CROISSANT !!! */
            board[0] = "02S";
            board[1] = "03S";
            board[2] = "04S";
            board[3] = "05S";
            board[4] = "14S";
                    
       }
            
        
        private void TrierCartesCroissant(){ /* Pour trier les cartes dans l'ordre croissant */
           
         for (int i = 0; i < 5; i++){
             
                int m = IndMin(board,i);  
                permut(board,i,m);
                
    	}
    
         }
        
        
        public void AfficheHand(){ /* Pour afficher la main (les cartes sont triées */
            
           TrierCartesCroissant();
           for (int i = 0; i < 5; i++){
               
               System.out.println( (i+1) + ": " + board[i] );
               
           }
           
           System.out.println("");
            
        }
        
        
        private int IndMin(String[]tab, int j){ /* Méthode nécessaire à la méthode "TrierCarteCroissant" */                                
    	String min = tab[j];                                                     
            
    	int ind = j;                                                             
    	for(int k = j; k < tab.length; k++){ 
                if(min.compareTo(tab[k]) > 0){                                      
                                                                                     
                    min = tab[k];
                    ind = k;
                }
                
            }
            
            return ind;
            
         }
         
         
        private void permut(String[]tab, int i, int j){  /* Méthode nécessaire à la méthode "TrierCarteCroissant" */                     
            String temp = new String();                                              
            temp = tab[i];
            tab[i] = tab[j];
            tab[j] = temp;
            
        }
        
       
       private boolean isPaire() { 
           
           boolean paire = false;
           
           if ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) ||
                ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) ||
                ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) ||
                ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) {
               
               paire = true;
               
           }
           
           return paire;
           
       }
       
       
       private boolean isDoublePaire(){
           
           boolean doublePaire = false;
           
           if (  ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) &&  ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) ) ||
                 ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) &&  ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) ||
                 ( ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) &&  ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) ){
               
              doublePaire = true; 
               
           }
           
           return doublePaire;
           
       }
       
       
       private boolean isBrelan(){
           
           boolean brelan = false;
           
           if (  ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) &&  ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) ) ||
                 ( ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) &&  ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) ) ||
                 ( ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) &&  ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) ) {
               
               brelan = true;
               
           }
           
           return brelan;
           
       }
       
       
      private boolean isCarre(){
          
          boolean carre = false;
          
          if ( ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) && ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) && ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) ||  
                 ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) && ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) && ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) ) {
              
             carre = true; 
              
          }
          
          return carre;
          
          
      }
      
      
      private boolean isFull(){
          
          boolean full = false;
          
          if (  ( ( ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) &&  ( ( board[1].substring(0,2) ).equals( board[2].substring(0,2) ) == true ) ) &&  ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) ||
                ( ( ( ( board[2].substring(0,2) ).equals( board[3].substring(0,2) ) == true ) &&  ( ( board[3].substring(0,2) ).equals( board[4].substring(0,2) ) == true ) ) &&  ( ( board[0].substring(0,2) ).equals( board[1].substring(0,2) ) == true ) ) ){
              
              full = true;
              
          }
          
          return full;
          
      }
      
      
      private boolean isSuite(){
          
          boolean suite = false;
          int flag = 0;
          
          if ( ( ( ( board[4].substring(0,2) ).equals("14" ) == true )&&
                 ( ( board[0].substring(0,2) ).equals("02" ) == true )&&
                 ( ( board[1].substring(0,2) ).equals("03" ) == true )&&
                 ( ( board[2].substring(0,2) ).equals("04" ) == true )&&
                 ( ( board[3].substring(0,2) ).equals("05" ) == true ) ) ) {         /* CAS PARTICULIER: la suite A,2,3,4,5 */
                 
                         suite = true;
                         flag = 1;  /* On met le flag à 1 pour ne pas rentrer dans la boucle CAS GENERAL */  
             
          }
           
          if ( flag == 0) {                                                          /* CAS GENERAL */
               
               suite = true;
               
               for (int i = 0; i < 4; i++){
           
                   if ( ( ( board[i].substring(1,2) ).compareTo ( board[i+1].substring(1,2) ) != -1) && 
                        ( ( board[i].substring(1,2) ).compareTo ( board[i+1].substring(1,2) ) != 9) ) {
                       
                             suite = false;
                                           
                   }
              
               }
               
           }
                        
          return suite;
          
      }
      
                    
       private boolean isCouleur(){
           
           boolean couleur = true;
           
           for( int i = 0; i < 4; i++ ){
               
               if ( ( board[i].substring(2,3) ).equals( board[i+1].substring(2,3) ) == false ){
                 
                   couleur = false;
                   
               }
               
           }
               
           return couleur;    
               
      }             
                    
      private boolean isQuinteFlush(boolean suite, boolean couleur){
          
          boolean quinteFlush = false;
          
          if ( (couleur == true) && (suite == true) ){
              
              quinteFlush = true;
              
          }
          
          return quinteFlush;
          
      }
          
     
      public StringBuffer Test(){ /* Méthode pour tester quelle est la figure de notre main */
          
          StringBuffer figure = new StringBuffer("");
          TrierCartesCroissant();
          
          boolean resQuinteFlush = isQuinteFlush( isSuite(), isCouleur() );
          if ( resQuinteFlush == true){
              
              figure.append("VOUS AVEZ UNE QUINTE FLUSH");
                 
          }
          
          else if (isCarre() == true){
              
              figure.append("VOUS AVEZ UN CARRE");
                  
          }
          
          else if (isSuite() == true){
              
              figure.append("VOUS AVEZ UNE SUITE");
              
          }
          
          else if (isCouleur() == true){
              
              figure.append("VOUS AVEZ UNE COULEUR");
              
          }
          
          else if (isFull() == true){
              
              figure.append("VOUS AVEZ UN FULL");
              
          }
          
          else if (isBrelan() == true){
              
              figure.append("VOUS AVEZ UN BRELAN");
              
          }
          
          else if (isDoublePaire() == true){
              
              figure.append("VOUS AVEZ UNE DOUBLE PAIRE");
              
          }
          
          else if (isPaire() == true){
              
              figure.append("VOUS AVEZ UNE PAIRE");
              
          }
          
          else {
              
              figure.append("VOUS N'AVEZ RIEN");
              
          }
          
          return figure;
          
      
          
          
          
          
      } /* FIN TEST */
      
      public void Ecart(Sabot s, int tab[]){
              
              for (int i = 0; i < 5; i++){
                  
                  if ( tab[i] != -1 ){
                      
                      board[i] = s.ExtraireCarte();
                      
                  }
                  
              }
              
              
          }
        
        
    } /*FIN CLASSE*/
    



    Voici mon problème :

    Je veux envoyer un objet "Hand", ici je l'ai appelé h1 du serveur vers au client.

    Dans le serveur, j'écris donc l'objet dans la socket:

    out.writeObject(h1);
    


    et dans le client, j'essaie de lire cet objet et de l'afficher directement via la methode "AfficheHand":

    ( (Hand)in.readObject() ).AfficheHand();
    



    Mais voilà ça ne fonctionne pas !!! :(
    Je n'arrive pas à (envoyer/lire ..?) l'objet.
    J'ai bien mis Serializable dans la classe Hand.

    Je précise aussi qu'avec mes classes serveur et client, je peux envoyer des chaines de caractères sans problèmes, ça fonctionne quoi..

    ]


    SERVEUR

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerserveur;
    
    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
        
    /**
     *
     * @author Johann
     */
    
    /* !!!!! VOICI LE SERVEUR !!!!! */
    
    
    public class Execution {
        
        public static void main(String[] args){
            
            ServerSocket svc = null;
            Socket socket1 = null;
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            
            
            
                
                  Sabot s1 = new Sabot();
                  
                  try {
                      
                     svc = new ServerSocket(8225);
                     socket1 = svc.accept();
                     in = new ObjectInputStream(socket1.getInputStream());
                     out = new ObjectOutputStream(socket1.getOutputStream());
               
                     Hand h1 = new Hand(s1);
    				 
                     out.writeObject(h1);
                     out.flush();
                    
                     socket1.close();
                
                  }
    			  
                  catch (Exception e1){ 
                     e1.printStackTrace();   
                  }
    			  
    	}
    }
    



    CLIENT

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package drawpokerclient;
    
    import java.net.*;
    import java.io.*;
    
    /**
     *
     * @author Johann
     */
    
    /* !!!!! VOICI LE CLIENT !!!!! */
    
    
    
    public class Execution {
        
        public static void main(String[] args){
          
            Socket socket1 = null;
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
                
            
            try {
                
                socket1 = new Socket("127.0.0.1", 8225);
                out = new ObjectOutputStream(socket1.getOutputStream()); /* FLUX DE SORTIE */
                in = new ObjectInputStream(socket1.getInputStream()); /* FLUX D'ENTREE */
                
                ( (Hand)in.readObject() ).AfficheHand();
                
                socket1.close();
                
            }
                 
            catch (Exception e1){
                e1.printStackTrace();    
            }
            
            
               
        } 
      
    }
    



    Voici le lien vers la capture d'écran pour voir les erreurs que ça m'affiche:
    http://img98.imageshack.us/img98/1563/captureus5.jpg



    Merci à tout ceux qui pourront m'aider..
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2009 à 13:44:07

      j'ai rien dis ... bon je jette un oeuil
      sinon vérifie bien pour la seribidultrucation ^^
      http://www.siteduzero.com/tutoriel-3-3 [...] -en-java.html

      tu saurais essayer

      ( (Hand)(in.readObject()) ).AfficheHand();
      

      je ne sais plus si le cast se fait avant ou apres le ".qqch()"


      enfin a mon avis il fait d'abord le .qqch =/
      tu sais me dire exactement quel ligne il te surligne ?
      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2009 à 13:56:33

        C'est ça en fait je ne suis pas sûr que mon objet "Hand" est serialisable..
        Pour moi pour rendre un objet serialisable, il suffit d'implémenter l'interface "Serializable" dans la classe "Hand" comme ceci. Et c'est tout non ?

        public class Hand implements Serializable {
        


        Donc ça oui je l'avais fait.

        Et sinon, pour décrire un peu mieux comment ont organisés mes fichiers:
        J'ai un projet DrawPokerServeur qui contient les classes "Execution"(du serveur), "Hand" et "Sabot" et un projet DrawPokerClient qui contient les classes "Execution"(du client), "Hand" et "Sabot".
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2009 à 14:00:28

          a priori je dirais que l'erreur ne viens pas de là =/

          =/ =/ tu saurais me dire quel ligne il te surligne ?
          ou bien mettre des System.out.println(); un peu partout voir ou il plante =/
          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2009 à 14:26:29

            OK je te mets les "balises" System.out.println()...
            Alors voilà les codes du serveur et du client avec les balises:

            SERVEUR:

            /*
             * To change this template, choose Tools | Templates
             * and open the template in the editor.
             */
            
            package drawpokerserveur;
            
            import java.io.*;
            import java.net.*;
            
                
            /**
             *
             * @author Johann
             */
            
            /* !!!!! VOICI LE SERVEUR !!!!! */
            
            
            public class Execution {
                
                public static void main(String[] args){
                    
                    
                    ServerSocket svc = null;
                    Socket socket1 = null;
                    ObjectInputStream in = null;
                    ObjectOutputStream out = null;
                    
                    
                          Sabot s1 = new Sabot();
                          
                          try {
                             
                             System.out.println("TEST A");
                             svc = new ServerSocket(8225);
                             System.out.println("TEST B");
                             System.out.println("Le serveur attend une connexion...\n" );
                             socket1 = svc.accept();
                             System.out.println("TEST C");
                             in = new ObjectInputStream(socket1.getInputStream());
                             out = new ObjectOutputStream(socket1.getOutputStream());
                             System.out.println("TEST D");
                             Hand h1 = new Hand(s1);
                             
                             out.writeObject(h1);
                             System.out.println("TEST E");
                             out.flush();
                           
                             socket1.close();
                             System.out.println("TEST F");
                          }
                          
                          catch (Exception e1){ 
                             e1.printStackTrace();   
                          }
                               
                } /* FIN MAIN */
            
            } /* FIN CLASSE EXECUTION */
            


            CLIENT

            /*
             * To change this template, choose Tools | Templates
             * and open the template in the editor.
             */
            
            package drawpokerclient;
            
            import java.net.*;
            import java.io.*;
            
            /**
             *
             * @author Johann
             */
            
            /* !!!!! VOICI LE CLIENT !!!!! */
            
            
            
            public class Execution {
                
                public static void main(String[] args){
                    
                    Socket socket1 = null;
                    ObjectInputStream in = null;
                    ObjectOutputStream out = null;
                       
                    
                    try {
                        
                        System.out.println("TEST 1");
                        socket1 = new Socket("127.0.0.1", 8225); /* Création de la socket Client */
                        System.out.println("TEST 2");
                        out = new ObjectOutputStream(socket1.getOutputStream()); /* FLUX DE SORTIE */
                        in = new ObjectInputStream(socket1.getInputStream()); /* FLUX D'ENTREE */
                        System.out.println("TEST 3");
                        ( (Hand)in.readObject() ).AfficheHand();
                        System.out.println("TEST 4");
                        socket1.close();
                            
                         }
                         
                    catch (Exception e1){
                        e1.printStackTrace();    
                    }
                       
                } /* FIN MAIN */
              
            } /* FIN CLASSE EXECUTION */
            



            Donc quand je lance le serveur:
            init:
            deps-jar:
            Compiling 1 source file to C:\Users\Johann\Documents\NetBeansProjects\DrawPokerServeur\build\classes
            compile-single:
            run-single:
            TEST A
            TEST B
            Le serveur attend une connexion...


            Puis je lance le client:
            Voici ce qui s'affiche dans le serveur:

            init:
            deps-jar:
            Compiling 1 source file to C:\Users\Johann\Documents\NetBeansProjects\DrawPokerServeur\build\classes
            compile-single:
            run-single:
            TEST A
            TEST B
            Le serveur attend une connexion...
            
            TEST C
            TEST D
            TEST E
            TEST F
            BUILD SUCCESSFUL (total time: 2 minutes 15 seconds)


            Voici ce qui s'affiche dans le client:

            init:
            deps-jar:
            compile-single:
            run-single:
            TEST 1
            TEST 2
            TEST 3
            java.lang.ClassNotFoundException: drawpokerserveur.Hand
                    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
                    at java.security.AccessController.doPrivileged(Native Method)
                    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
                    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
                    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
                    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
                    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
                    at java.lang.Class.forName0(Native Method)
                    at java.lang.Class.forName(Class.java:247)
                    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
                    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
                    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
                    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
                    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
                    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
                    at drawpokerclient.Execution.main(Execution.java:37)
            BUILD SUCCESSFUL (total time: 0 seconds)


            captures d'écran:

            http://img7.imageshack.us/img7/1241/capture1df8.jpg

            et l'erreur est bien à cette ligne (elle est surlignée):

            ( (Hand)in.readObject() ).AfficheHand();
            


            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2009 à 14:55:54

              bizarrement il ne trouve pas la class Hand =/ :'(
              °_0 la je pige pas pourquoi =/ tu pourrais rajouter une class test qui fait ceci :

              un cast vers Object d'un objet and
              (Object) new Hand();
              et puis un cast dans l'autre sens :o ?
              • Partager sur Facebook
              • Partager sur Twitter
                18 février 2009 à 15:58:42

                En fait tu veux que:

                SERVEUR:

                - je crée mon objet "Hand" "h1" dans le serveur:
                Hand h1 = new Hand(s1);
                

                - je cast "h1" en "Object":
                Object o1 = (Object) h1;
                

                - J'envoie l'objet "o1" au client:
                out.writeObject(o1);
                


                CLIENT

                - Je recupère l'objet envoyé par le serveur:
                Object oRecu = in.readObject();
                

                - Je cast cet objet "oRecu" en "Hand":
                Hand h2 = (Hand) oRecu;
                

                - J'essaye d'afficher cet objet "h2":
                h2.AfficheHand();
                



                OK je l'ai fait:

                CLIENT

                /*
                 * To change this template, choose Tools | Templates
                 * and open the template in the editor.
                 */
                
                package drawpokerclient;
                
                import java.net.*;
                import java.io.*;
                
                /**
                 *
                 * @author Johann
                 */
                
                /* !!!!! VOICI LE CLIENT !!!!! */
                
                
                
                public class TestExecution {
                    
                    public static void main(String[] args){
                        
                        Socket socket1 = null;
                        ObjectInputStream in = null;
                        ObjectOutputStream out = null;
                           
                        
                        try {
                            
                            System.out.println("TEST 1");
                            socket1 = new Socket("127.0.0.1", 8225); /* Création de la socket Client */
                            System.out.println("TEST 2");
                            out = new ObjectOutputStream(socket1.getOutputStream()); /* FLUX DE SORTIE */
                            in = new ObjectInputStream(socket1.getInputStream()); /* FLUX D'ENTREE */
                            System.out.println("TEST 3");
                            
                            Object oRecu = in.readObject();
                            Hand h2 = (Hand) oRecu;
                            h2.AfficheHand();
                            
                            System.out.println("TEST 4");
                            socket1.close();
                                
                             }
                             
                        catch (Exception e1){
                            e1.printStackTrace();    
                        }
                           
                    } /* FIN MAIN */
                  
                } /* FIN CLASSE EXECUTION */
                


                SERVEUR

                /*
                 * To change this template, choose Tools | Templates
                 * and open the template in the editor.
                 */
                
                package drawpokerserveur;
                
                import java.io.*;
                import java.net.*;
                
                    
                /**
                 *
                 * @author Johann
                 */
                
                /* !!!!! VOICI LE SERVEUR !!!!! */
                
                
                public class TestExecution {
                    
                    public static void main(String[] args){
                        
                        
                        ServerSocket svc = null;
                        Socket socket1 = null;
                        ObjectInputStream in = null;
                        ObjectOutputStream out = null;
                        
                        
                              Sabot s1 = new Sabot();
                              
                              try {
                                 
                                 System.out.println("TEST A");
                                 svc = new ServerSocket(8225);
                                 System.out.println("TEST B");
                                 System.out.println("Le serveur attend une connexion...\n" );
                                 socket1 = svc.accept();
                                 System.out.println("TEST C");
                                 in = new ObjectInputStream(socket1.getInputStream());
                                 out = new ObjectOutputStream(socket1.getOutputStream());
                                 System.out.println("TEST D");
                                 Hand h1 = new Hand(s1);
                                 Object o1 = (Object) h1;
                                 
                                 out.writeObject(o1);
                                 System.out.println("TEST E");
                                 out.flush();
                               
                                 socket1.close();
                                 System.out.println("TEST F");
                              }
                              
                              catch (Exception e1){ 
                                 e1.printStackTrace();   
                              }
                                   
                    } /* FIN MAIN */
                
                } /* FIN CLASSE EXECUTION */
                



                Encore une fois ca donne une erreur... :(

                Voilà ce qu'il s'affiche dans le client:

                init:
                deps-jar:
                compile-single:
                run-single:
                TEST 1
                TEST 2
                TEST 3
                java.lang.ClassNotFoundException: drawpokerserveur.Hand
                        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
                        at java.security.AccessController.doPrivileged(Native Method)
                        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
                        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
                        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
                        at java.lang.Class.forName0(Native Method)
                        at java.lang.Class.forName(Class.java:247)
                        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
                        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
                        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
                        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
                        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
                        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
                        at drawpokerclient.TestExecution.main(TestExecution.java:38)
                BUILD SUCCESSFUL (total time: 0 seconds)


                L'erreur intervient à cette ligne:

                Object oRecu = in.readObject();
                




                • Partager sur Facebook
                • Partager sur Twitter
                  19 février 2009 à 21:54:28

                  Bon j'ai résolu mon problème.
                  En fait c'était dû au fait qu'il y ait 2 classes "Hand" dans le serveur et dans le client....

                  Bon en gros pour corriger mon problème, j'ai crée 3 projets:

                  - DrawPokerServeur qui contient la classe "Execution" (--> Execution du serveur)
                  - DrawPokerClient qui contient la classe "Execution"(--> Execution du client)
                  - DrawPokerUtilitaire qui contient les classes "Hand" et "Sabot"

                  Après il faut que je lie DrawPokerClient et DrawPokerServeur à DrawPokerUtilitaire.
                  --> clic droit sur le Projet, properties, libraries, add project (ajouter DrawpokerUtilitaire)..

                  Puis dans DrawPokerClient:

                  import drawpokerutilitaire.Hand;
                  


                  et dans DrawPokerServeur:

                  import drawpokerutilitaire.Hand;
                  import drawpokerutilitaire.Sabot;
                  


                  Et voilà ça fonctionne j'arrive à envoyer un objet "Hand" du serveur au client, à lire et afficher cet objet dans le client..

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 février 2009 à 23:28:21

                    ha :p
                    moi j'ai tendance a faire mon serveur et mon clients dans le même projet :p
                    enfin façon de voir les choses :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 février 2009 à 8:27:33

                      Citation : Snooooopy

                      ha :p
                      moi j'ai tendance a faire mon serveur et mon clients dans le même projet :p
                      enfin façon de voir les choses :)


                      Et si tu as besoin d'un client sur une machine et d'un serveur sur une autre tu aura forcément les 2 = plus lourd.

                      Je sais pas si c'est la meilleure solution d'avoir un 3ème projet commun aux 2 application. Est-ce que tu ne peut pas envoyer une chaine de caractère sous un format spécifique que tu récupère et tu reconstruit l'objet (hand).

                      Enfin si ton truc marche tant mieux mais bon ...
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Envoi d'un objet d'1 Serveur vers 1 Client

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown