Probleme java.lang.NullPointerException

Résolu
n1ouk Messages postés 2 Date d'inscription vendredi 4 décembre 2009 Statut Membre Dernière intervention 3 juin 2011 - 3 juin 2011 à 14:17
n1ouk Messages postés 2 Date d'inscription vendredi 4 décembre 2009 Statut Membre Dernière intervention 3 juin 2011 - 3 juin 2011 à 17:44
Bonjour, je fait actuellement un petit programme pour mon école et je me retrouve face à une erreur du type "java.lang.NullPointerException". Je crois savoir que l'erreur viens d'une variable non initialisée mais je ne vois pas ou est le problème. C'est pour cette raison que je vous demande un peu d'aide =).

Le programme est en fait un jeu de bataille navale (très simplifiée ^^') et se décompose en deux partie, le serveur et le client. J'utilise une classe dans chaque partie pour manipuler les clients.

L'erreur survient sur le serveur après que j'ai lancé le serveur et les deux clients :

Exception in thread "main" java.lang.NullPointerException
at applicationserveur.MainServeur.Envoyer(MainServeur.java:153)
at applicationserveur.MainServeur.main(MainServeur.java:68)


Je vous donne le code du serveur en espérant que ce soit une erreur toute bête et que je puisse m'y remettre rapidement =) :

/*
 *  ------ Serveur -----
 */

package applicationserveur;

import java.io.*;
import java.net.*;
import java.util.*;
import bibiut.CConsole;

class CServiceClient
{
    Socket serviceClient;
    PrintWriter fluxSortant;
    Scanner fluxEntrant;
    String chaine = "rien"; // message a echanger avec le client
    String pseudo = "anonymous";
    char[][]grille;
}

public class MainServeur
{
    public static void main(String[] args) throws IOException
    {
        int portServer= 5007;
        int nbClient = 2;   // Le nombre de clients prévu pour ce programme
        ServerSocket serveur;
        CConsole fen_serv = new CConsole();

        // Creation des services client
        CServiceClient[]tabClient = new CServiceClient[nbClient];
        for(int h=0;h<nbClient;h++)
        {
            tabClient[h] = new CServiceClient();
            tabClient[h].chaine = "rien";
            tabClient[h].pseudo = "anonymous";
            tabClient[h].grille = new char[10][10];
            CompleteGrille(tabClient[h]);
        }

        //placer le server en ecoute
        serveur = new ServerSocket(portServer);
        fen_serv.println("serveur en ecoute");
        
        //attente du client
        for(int i = 0 ;i<nbClient;i++)
        {
            tabClient[i].serviceClient = serveur.accept();//!!!instruction bloquante!!!
            fen_serv.println("client "+i+" connecté");
        }

        //Envoi de la grille de jeu au client :
        for(int j=0;j<2;j++)
        {
            //tabClient[j].chaine = ChaineGrille(tabClient[j].grille);
            Envoyer(tabClient,j,j);
        }

        //debut de l'application serveur
        fen_serv.println("début d'application");
        int nbClientFin=0;
        boolean fin = false;
        int clientDest;

        do
        {
            for(int k =0;k<nbClient-1;k++)
            {
                // lecture : attente du message du client
                Recevoir(tabClient[k]);
                // traitement du message
                fin = InterpreteurServeur(tabClient[k],fen_serv);
                // envoi à l'autre client
                if(k == 0)
                {
                    clientDest = 1;
                }
                else
                {
                    clientDest = 0;
                }
                Envoyer(tabClient,k,clientDest);
                // test de fin d'application
                if(fin)
                {
                    Fermer(tabClient[k]);
                    nbClientFin++;
                }
            }
        }while(nbClientFin == nbClient);
    
        // envoyer les messages de fermeture aux clients
        serveur.close();
        fen_serv.println("fin d'application");
    }
    public static void CreerFlux(CServiceClient c) throws IOException
    {
        c.fluxEntrant = new Scanner(c.serviceClient.getInputStream());
        c.fluxSortant=new PrintWriter(c.serviceClient.getOutputStream(),true);
    }

    public static void Fermer(CServiceClient c) throws IOException
    {
        c.fluxSortant.close();
        c.fluxEntrant.close();
        c.serviceClient.close();
    }

   public static void Recevoir(CServiceClient c)
    {
       c.chaine = c.fluxEntrant.nextLine();
    }

   public static boolean InterpreteurServeur(CServiceClient c,CConsole console)
   {
       boolean fini=false;
       if(c.chaine.equals("fin"))
       {
           fini= true;
           c.chaine="finok";
       }
       else if(c.chaine.startsWith("pseudo"))
       {
           c.pseudo = c.chaine.substring(7);    // On efface les 7 premiers caracteres de la chaine
           c.chaine = "Nouveau pseudo\n";
       }
       else if(c.chaine.endsWith("rien") == false)
       {
           console.println(c.chaine);
       }
       return fini;
   }

   public static void Envoyer(CServiceClient c[],int clientSource,int clientDest)
   {
       System.out.println(clientDest);
       System.out.println(clientSource);
       System.out.println(c[clientSource].pseudo);
       System.out.println(c[clientSource].chaine);

       c[clientDest].fluxSortant.println(c[clientSource].pseudo+" : "+c[clientSource].chaine+"Boujour");
   }

   public static void CompleteGrille(CServiceClient c)
   {   int li,co;
       Random r = new Random();
       for(int i=0;i<10;i++)
       {
           for(int j=0;j<10;j++)
           {
               c.grille[i][j] = 0;
           }
       }

       for(int nbBateaux=0;nbBateaux<10;nbBateaux++)
       {   li = r.nextInt(10);
           co = r.nextInt(10);
           c.grille[li][co]= '1' ;
       }
   }

    public static String ChaineGrille(char [][] t)
    {
       String chaineGrille="";;
       for(int co=0;co<10;co++)
       {
           for(int li=0;li<10;li++)
           {
               chaineGrille+=t[co][li]+",";
           }
           chaineGrille+=";";
       }
       return chaineGrille;
    }
}


Merci de votre aide,
n1ouk

2 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
3 juin 2011 à 17:29
Salut,

Dans un premier temps, ca manque de closes try...catch.. tous ça...
Sinon ;o) t aurais pas oublié d'appeler ta methode creerflux???
à vue de nez il me semble bien que tu essayes des envois et reception avec des scanner à null... ;o)


GodConan ;o)
3
n1ouk Messages postés 2 Date d'inscription vendredi 4 décembre 2009 Statut Membre Dernière intervention 3 juin 2011
3 juin 2011 à 17:44
Merci GodConan.
En effet j'avais oublier d'appeler la fonction CreeFlux .
Je l'ai appelée et maintenant il n'y a plus d'erreur d'entrée de jeu.

Je te remercie beaucoup .

PS : hum mettre des try catch, ce serait un plus tu a raison .

n1ouk
0
Rejoignez-nous