Probleme java.lang.NullPointerException [Résolu]

Messages postés
2
Date d'inscription
vendredi 4 décembre 2009
Statut
Membre
Dernière intervention
3 juin 2011
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
18
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 139 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_GodConan
Messages postés
2
Date d'inscription
vendredi 4 décembre 2009
Statut
Membre
Dernière intervention
3 juin 2011
0
Merci
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
Commenter la réponse de n1ouk

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.