Bonsoir

Je souhaiterais savoir s'il est possible d'accéder à un objet lancer dans un thread.

je m'explique, j'ai une class C_Chat_Emission qui étend la class Thread:

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
 
package CONTROLEUR;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
 
public class C_Chat_Emission extends Thread
    {
    private PrintWriter out;
    private String message = null;
    private Scanner sc = null;
 
    public C_Chat_Emission(PrintWriter out) 
        {this.out = out;}
 
    public void run() 
        {
        sc = new Scanner(System.in);
 
        while(true)
            {
            System.out.println("Votre message :");
            this.message = this.sc.nextLine();
            this.sendMessage(this.message);
            //this.out.println(this.message);
            //this.out.flush();
            }
        }
 
    /**
     * Envoie un message au serveur
     * @param String message 
     */
    public void sendMessage(String message)
        {
        this.out.println(message);
        this.out.flush();
        }
    }
je lance mon thread depuis un autre contrôleur:

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
 
package CONTROLEUR;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
public class C_Chat extends Thread
    {
    private Socket socket;
    private PrintWriter out = null;
    private BufferedReader in = null;
    private Thread threadEmission, threadReception;
    private Boolean active = true;
 
    public C_Chat(Socket s)
        {this.socket = s;}
 
    public void run() 
        {
        try 
            {
            this.out = new PrintWriter(this.socket.getOutputStream());
            this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
 
            this.threadEmission = new Thread(new C_Chat_Emission(this.out));
            this.threadEmission.start();
            this.threadReception = new Thread(new C_Chat_Reception(this.in));
            this.threadReception.start();
 
            while(this.active)
                {
                if(!this.threadReception.isAlive())
                    {
                    System.out.println("interruption du thread: "+this.threadEmission.getName());
                    this.threadEmission.interrupt();
                    System.out.println("fermeture de la socket: "+this.socket.toString());
                    this.socket.close(); 
                    this.active = false; 
                    }
                }
            System.out.println("interruption du thread: "+this.getName());
            this.interrupt();
            } 
        catch (IOException e) 
            {System.err.println("Le serveur distant s'est déconnecté !");}
        }
    }
Je souhaiterais une fois lancé pouvoir agir sur mon objet, par exemple utiliser la méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
public void sendMessage(String message)
mais je ne vois pas comment faire.

J'ai testé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
this.threadEmission.sendMessage("test");
mais comme je m'y attendais ça ne fonctionne pas. Je ne trouve rien de précis sur ce sujet sur le net...

Si quelqu'un a une piste une idée ...