IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

chat client server et textarea


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Par défaut chat client server et textarea
    Bonjour j'ai pour but de developper un chat client/server le chat en lui même fonctionne mais j'aimerais le faire en graphique j'ai donc pensé à l'utilisation de textarea mais j'ai un problème au niveau de l'actionPerformed qui ne veut pas prendre en compte les caractère que je reçoit du serveur je bloque dessus depuis dimanche svp aidez moi ^^.
    Voici le code source:
    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
    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 static String transpo;
        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=new BufferedReader(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){   
     
    			    createAndShowGUI();
    			    transpo=canalLecture.readLine();
    			//	if((ligne !=null)||(!ligne.equals(""))){
    				//	canalEcriture.println(ligne);
    				//}	
     
    			//System.out.println(transpo);
    			}		
    		}catch(Exception e){e.printStackTrace();}
     
    	}
    	public void actionPerformed(ActionEvent evt) {
    		//transpo=console.readLine();
            String text = textField.getText();
            textArea.append(transpo+ 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);
    	}
     
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Le JTextArea est alimenté seulement lorsque tu fais une action sur le JTextField.
    Il ne faut pas faire comme ça. Tu dois faire un Thread qui lit en permanence les données qui arrivent (canalLecture.readLine()). A chaque nouvelle donnée, il faut l'afficher dans le JTextArea.
    L'ajout dans le JTextArea ne doit pas se faire dans la methode "actionPerformed".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Par défaut en effet ^^
    Merci de ta réponse je commençais a perdre espoir.En effet j'ai voulu trop suivre le code de base alors que je pouvais faire plus simple . J'ai réalisé ceci:
    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
    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=new BufferedReader(isr);//buffer les char arrivant dans le canalLecture
    			BufferedReader console=new BufferedReader(new InputStreamReader(System.in));//buff les char arrivant du clavier
    			PrintStream canalEcriture=new PrintStream(s.getOutputStream());//envoyant les char du clavier vers la sortie
     
     
    			System.out.println("Connection établie:"+s.getInetAddress()+"port:"+s.getPort());
    			String ligne;
    			createAndShowGUI();//creer le GUI avant d'entrer dans le while
    			while(true){   
     
    				//transpo=console.readLine();
    				String text = textField.getText();
    		        textField.selectAll();
    		    	if((text !=null)||(!text.equals(""))){
    					canalEcriture.println(text);
    				}	
    		        transpo=canalLecture.readLine();
    			//System.out.println(transpo);
    			}		
    			textArea.append(transpo+ newline);//erreur ici 
    	        //Make sure the new text is visible, even if there
    	        //was a selection in the text area.
    	        textArea.setCaretPosition(textArea.getDocument().getLength());//puis erreur ici
    		}catch(Exception e){e.printStackTrace();}
     
    	}
    En fait à l'origine je n'avais pas mis le textarea.append en dehors de la boucle while ce qui fait qu'il me renvoyais bien le résultat que je voulais mais il s'arretait pas ^^(fause joie)donc je l'ai mis en dehors de la boucle while mais il me dit que le code est unreachable , est ce que c'est du au fait que textarea doit etre a coté de textfield ou quelque chose dans le genre car je vois pas du tout comment remédier a ce problème et eclipse n'est pas très bavard sur ceci non plus XD.

Discussions similaires

  1. Client / Server (Chat) : Exe Application Crash
    Par sdk.coders dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/09/2009, 04h45
  2. client/server avec textarea
    Par matthew974 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/12/2008, 16h15
  3. ACE - AJAX Chat Engine (Server + Client)
    Par |PaRa-BoL dans le forum Mon programme
    Réponses: 4
    Dernier message: 15/01/2007, 17h02
  4. [réseau] [client/server] Transmettre la sortie standard
    Par legzo dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 30/06/2005, 16h15
  5. [ado][sql server] CLIENT/SERVER
    Par nil dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 08h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo