Salut,
Je suis en train de faire une application client-serveur.J'essaye d'enregistrer le flux de sortie dans un tableau.
Au depart j'utilisais un Tableau de vecteur mais par la suite j'ai implemente ma propre classe qui devait enregistre le PrintWriter de chaque client ainsi que certaines autres informations.
Lorsque j'ajoute un client j'envoie PrintWriter out qui devient null alors qu'a sa creation il ne l'est pas.
Avez vous une idee?

Voici ma class qui enregistre les PrintWriter
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
class Table{
	//cette classe permet l association du flux avec le client:) Pour l instant on enregistre que la position
	//plus tard on creera un objet joueur
	PrintWriter out;
	int pos;
	Table(){
		this.pos=-1;
		this.out=null;
	}
 
	Table(PrintWriter o,int pos){
		this.pos=pos;
		this.out=out;
	}
 
	Table(PrintWriter o){
		this.pos=-1;
		this.out=out;
	}
 
	public int getPosition(){
		return this.pos;
	}
 
	public void setPosition(int a){
		this.pos=a;
	}
 
	public PrintWriter getWrite(){
		return this.out;
	}
}
 
 
class TableClients{
 
	private Table tab[];
	private int nbclients=0;
	private int MaxClients;
 
	TableClients(int n){
		MaxClients=n;
		tab=new Table[n];
		init();
	}
 
	public void init(){
		for(int i=0;i < MaxClients;i++)
			tab[i]=new Table();
	}
 
//fonctions qui renvoie la position ou le PrintWriter out
Voici le thread du server qui est lance a chaque nouvelle connexion d'un client vers le serveur

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
 
BlablaThread(Socket s, BlablaServ blablaServ) 
  {
    _blablaServ=blablaServ; 
    _s=s;
    try
    {
     _out = new PrintWriter(_s.getOutputStream());
      _in = new BufferedReader(new
InputStreamReader(_s.getInputStream()));
      System.out.println("out vaut "+_out);//test de _out : il n'est pas null
      _numClient = blablaServ.addClient(_out,-1);
    //l'appel de addClient avec les parametre
    }
    catch (IOException e){System.out.println("exception thread server pour le out et in"); }
 
    _t = new Thread(this); 
    _t.start(); 
  }
Voici le code de addClient qui se trouve dans la class serveur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 synchronized public int addClient(PrintWriter out,int position)
  {
    _nbClients++; 
    _tabClients.addElement(out,position);
    System.out.println("out vaut : "+_tabClients.elementAt(0));
    //cela m'affiche null
    return _tabClients.size()-1;
  }