essayant d'envoyer un objet via d'un thread server vers un client par ObjectOutputStream, je reçoit une exception
Exception in thread "Thread-4" java.lang.NullPointerException
en déboggant, j'ai remarqué que l'objet de la méthode d'envoi obj est null, comme s'il n'a pas été remplace par celui passé en paramètres car pub n'est pas null, pourtant le même code fonctionnait avant que je mette le serveur dans un thread à part.

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
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
 
Socket socket;
ServerSocket srv;
Participant Ui;  //un client
List<Participant> participants = new ArrayList<>(); //liste de clients
Publication pub = new Publication(this.data); //objet à envoyer
//thread serveur
Runnable serverTask = () -> {
 
              try {
                    srv = new ServerSocket(Integer.valueOf(txtPort.getText()));
 
 
                    for (int i = 0; i < nbrParticipants; i++) {
                        //serveur accepte la connexion d'un participant
                        socket = srv.accept();
                        Ui = new Participant(nonce, socket);
                        //ajouter le participant à connecté à la liste
                        participants.add(Ui);
 
 
                        //lancement du thread du nouveau participant
                        Thread thread = new Thread(Ui);
                        thread.start();
 
 
                        //incrémente le compteur afin d'attribuer un nouveau Id
                        nonce++;
                    }
 
 
                    //attendre que tous les candidats se connectent
                    //pour envoyer les données 
                    for (int i = 0; i < participants.size(); i++) {
                        participants.get(i).send(pub); //erreur exception ici
                    }
 
 
                } catch (IOException e) {
                    e.printStackTrace();
                }
            };
Thread serverThread = new Thread(serverTask);
serverThread.start();
méthode send()
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
 
public class Participant implements Runnable {
    public void run() {        try {
            oos = new ObjectOutputStream(cnx.getOutputStream());
            ois = new ObjectInputStream(cnx.getInputStream());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
 
    public void send(Object obj) {
        try {
            oos.writeObject(obj);
            oos.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }   
}