essayant d'envoyer un objet via d'un thread server vers un client par ObjectOutputStream, je reçoit une exception
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.Exception in thread "Thread-4" java.lang.NullPointerException
Serveur
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
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();
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(); } } }
Partager