n1ouk
Messages postés2Date d'inscriptionvendredi 4 décembre 2009StatutMembreDernière intervention 3 juin 2011
-
3 juin 2011 à 14:17
n1ouk
Messages postés2Date d'inscriptionvendredi 4 décembre 2009StatutMembreDerniè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
A voir également:
Exception in thread "thread-2" java.lang.nullpointerexception
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 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)