Bonjour je suis nouveau dans le domaine de la programmation java (3 mois environ) j'ai comme travaux pratique de réaliser un chat que j'ai pu réaliser mais je souhaiterais l'améliorer avec des textarea .
J'ai fait des recherche sur le site de sun,j'ai presque trouvé la solution en fait mais il y a un endroit ou ça bloque .
Je vous donne mon code pour mieux vous expliquer:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.util.*;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
 
import server.TextDemo;
 
 
public class Client extends JPanel implements ActionListener  {
    protected static final int PORT=4550;
    protected String nomclient="Matthieu";
    protected static final String IP="127.0.0.1";
 
    protected JTextField textField;
    protected JTextArea textArea;
    private final static String newline = "\n";
 
    public Client() {
        super(new GridBagLayout());
 
        textField = new JTextField(20);
        textField.addActionListener(this);
 
        textArea = new JTextArea(5, 20);
        textArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(textArea);
 
        //Add Components to this panel.
        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = GridBagConstraints.REMAINDER;
 
        c.fill = GridBagConstraints.HORIZONTAL;
        add(textField, c);
 
        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1.0;
        c.weighty = 1.0;
        add(scrollPane, c);
    }
 
    public static void main(String[] args){
        Socket s=null;
        try{
            DataInputStream dis;
            s=new Socket(IP,PORT);
            InputStreamReader isr=new InputStreamReader(s.getInputStream());//octet transformé du socket s en char
            BufferedReader canalLecture=newBufferedReader(isr);//buffer les char arrivant dans le canalLecture
            BufferedReader console=new BufferedReader(new InputStreamReader(System.in));//buff les char arrivant  
            PrintStream canalEcriture=new PrintStream(s.getOutputStream());//
            System.out.println("Connection établie:"+s.getInetAddress()+"port:"+s.getPort());
            String ligne;
            while(true){
                javax.swing.SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        createAndShowGUI();
                    }
                });
                ligne=console.readLine();
                if((ligne !=null)||(!ligne.equals(""))){
                    canalEcriture.println(ligne);
                }    
 
            System.out.println(canalLecture.readLine());
            }
 
 
        }catch(Exception e){e.printStackTrace();}
 
    }
    public void actionPerformed(ActionEvent evt) {
        String text = textField.getText();
        textArea.append(text+ newline);
        textField.selectAll();
 
        //Make sure the new text is visible, even if there
        //was a selection in the text area.
        textArea.setCaretPosition(textArea.getDocument().getLength());
    }
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Client");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        //Add contents to the window.
        frame.add(new Client());
 
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
 
}

en fait le problème c'est que je dois modifier dans l'ActionPerfomed car il va utiliser text(variable de l'exemple du site de Sun ) pour mettre dans le TextArea et en faite il faudrait que je remplace cela par le canalLecture mais il s'agit d'un bufferedReader ,j'ai essayé de le remplacer par le canalLecture.readLine() .
Mais le véritable problème est que dans l'ActionPerformed il ne peut accéder au buffer qui n'est pas une variable globale ,j'ai essayé de la passer en global mais y a encore un problème ^^ car je ne sais pas comment crée un buffer en global pour ensuite l'utiliser dans le main et bufferiser isr qui est le flot de données qui arrivent du serveur .
Il faut que j'arrange mon programme aussi car pour l'instant je n'ai que combler mon programme avec celui de Sun pour le textarea et trouver qu'est ce que je devais modifier pour que les données entrante passent dans le textarea mais chaque chose en son temps ^^.