Lire les caracteres au fur et à messure: java

Résolu/Fermé
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 5 mai 2010 à 09:52
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 - 5 mai 2010 à 13:42
Bonjour à toutes et à tous,
Comme indiqué dans le titre, je jouhaite pouvoir lire les caractère que je rentre au clavier au fur et à mesure sans meme appuyer sur entrer.
Au fait, je realise un projet d'echange en live multi-clients serveur. Pour l'instant mes clients reussisent à communiquer via un terminal; mais pour cela, il faut que chaque clt ait fini d'ecrire son message et taper sur entrer pour que les autres clients le recoive. ALors que ce que je ve c'est qu'à chaque fois que je tape un caractère, les autres clts le reçoivent en meme temps.
Le but est qu'ils puissent modifier le texte apres(mais ca c 'est la deuxième étape; déjà s'ils peuvent le voir en meme temps ça serait bien).
En fin, l'objectif final est de faire une belle interface swing faisant tout ca qui est mentionné ci-haut.
Merci d'avance de votre aide car je ne sais plus quoi faire.
A voir également:

10 réponses

Billgates95 Messages postés 43 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 29 décembre 2010 24
5 mai 2010 à 10:01
slt pour lire les caracteres au fur et a mesure tu peux faire des manip de chaine
en C ou en C++
le mot cle en C++ est string de la librairie string .h;l'equivalent en C est sterlen
surtout noubli pas de les progra a la norme ISO ou ANSI selon le compilateur que tu as allez Bonne chance
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 10:03
merci de la réponse; mais le langage qui m'est imposé est le java(c'est un projet à la fac).
0
xav3601 Messages postés 3289 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
5 mai 2010 à 10:21
Tu peux mettre le code qui leut permet de communiquer déjà!
Comme ca on pourra se baser la dessus pour essayer d'avancer!
0
Si tu dois le faire en Swing, voici un petit exemple basé sur un JTextField :

JFrame fr = new JFrame();
JTextField tf = new JTextField();
tf.getDocument().addDocumentListener(new DocumentListener() {

@Override
public void removeUpdate(DocumentEvent e) {
manageChange(e);
}

@Override
public void insertUpdate(DocumentEvent e) {
manageChange(e);
}

@Override
public void changedUpdate(DocumentEvent e) {
manageChange(e);
}

private void manageChange(DocumentEvent e) {
try {
System.err.println("Type : "+e.getDocument().getText(e.getOffset(), e.getLength()));
}
catch (BadLocationException e1) {
e1.printStackTrace();
}
}
});
fr.getContentPane().add(tf);
fr.pack();
fr.setVisible(true);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 10:30
code de la partie client:

import java.io.*;
import java.net.*;

public class Client
{
//on declare une socket de type Socket qui ouvre une connexion au serveur
//on declare une variable de type String
//on initialise le port de connexion au serveur (ici le port par defaut est 8254)
private Socket socket;
private String name;
private final int PORT=8254;


//la methode Client prend en param�tre une socket ainsi qu'une cha�ne de caract�re associee � cette Socket
public Client(Socket s, String n)
{
this.socket=s;
this.name=n;
}

public static void main(String[] args)
{
//try = gestion d'erreurs, lorqu'il re�oit une erreur, il l'intercepte et l'affiche avec le catch

//la methode "main" ouvre une socket sur une adresse IP par defaut et sur le port du serveur aussi passe en defaut

try
{
BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
String numero = "8254";
String ipadress;
String pseudo = System.getProperty("user.name");
System.out.println("entrez l'adresse ip du serveur ");
ipadress= clavier.readLine();
Socket connexion = new Socket(ipadress, 8254);
//Socket connexion = new Socket("172.16.0.1", 8254);
//les 3 lignes de codes suivantes g�rent la gestion de lecture/ecriture du clavier
PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true);
BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));

//ici on informe le serveur qu'un nouveau client vient de se connecter
sortie.println("Nouveau client "+ numero);

//on fait appelle ^ la classe ThreadClient pour etablir la connexion
new ThreadClient(connexion, numero).start();

System.out.println("***************************************************************************"+"\n");
System.out.println("Bonjour "+pseudo+", bienvenue sur le Chat de notre equipe de developpement "+"\n");
System.out.println("***************************************************************************");

System.out.println("Connexion etablie!");
System.out.println("Pour sortir tapez : quitter");
System.out.println(pseudo+" peut desormais dialoguer avec les autres personnes connectees."+"\n");

//Tant que le Client n'a pas tapper "quitter", la connexion est toujours etablie
//le mot de passe "quitter" indique la fin d'une connexion


/*
while (true)
{

//String ligne = "test";
char ligne = (char) clavier.read();

if (ligne=='!')
//if (ligne.equalsIgnoreCase("quitter"))
{
sortie.println("quitter");

break;
}

//la sortie du "try" si la connexion au serveur a echouZ, elle est indiquee

// ecrit le texte tapZ au serveur(ds le flux)
while (ligne!='!') sortie.print(ligne);
// if (ligne != null) sortie.println(ligne);
*
*/
while(true){

final char EOF = (char)-1 ; // caract'ere << End Of File >>

char carCourant ;
carCourant = (char) System.in.read () ;

if (carCourant == EOF){

// static void avancerCar () {
// try {

sortie.println("quitter");

break;
}
if (carCourant!= EOF) sortie.print(carCourant);

// catch (java.io.IOException e) {
// carCourant = (char) System.in.read () ;
// carCourant = EOF ; /* En cas d'exception, on consid'ere
// la fin de fichier atteinte. */
// }
// }


}
}
catch(IOException e) { System.out.println("Erreur client : "+e); }
System.out.println("Connexion terminee...");
}

//la methode getName permet de nous retourner le nom associe � la socket
public String getName()
{
return name;
}
//la methode getSocket nous retourne la Socket
public Socket getSocket()
{
return socket;
}
//setSocket permet de modifier la Socket et de la remplacer
public void setSocket(Socket socket)
{
this.socket = socket;
}
//setName permet de changer le nom attribue � la socket
public void setName(String name)
{
this.name = name;
}




}
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 10:34
non je me suis trompé de code, celui là n'est pas bon
Voici le bon:

import java.io.*;
import java.net.*;

public class Client
{
//on declare une socket de type Socket qui ouvre une connexion au serveur
//on declare une variable de type String
//on initialise le port de connexion au serveur (ici le port par defaut est 8254)
private Socket socket;
private String name;
private final int PORT=8254;


//la methode Client prend en param�tre une socket ainsi qu'une cha�ne de caract�re associee � cette Socket
public Client(Socket s, String n)
{
this.socket=s;
this.name=n;
}

public static void main(String[] args)
{
//try = gestion d'erreurs, lorqu'il re�oit une erreur, il l'intercepte et l'affiche avec le catch

//la methode "main" ouvre une socket sur une adresse IP par defaut et sur le port du serveur aussi passe en defaut

try
{
BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
String numero = "8254";
String ipadress;
String pseudo = System.getProperty("user.name");
System.out.println("entrez l'adresse ip du serveur ");
ipadress= clavier.readLine();
Socket connexion = new Socket(ipadress, 8254);
//Socket connexion = new Socket("172.16.0.1", 8254);
//les 3 lignes de codes suivantes g�rent la gestion de lecture/ecriture du clavier
PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true);
BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));

//ici on informe le serveur qu'un nouveau client vient de se connecter
sortie.println("Nouveau client "+ numero);

//on fait appelle ^ la classe ThreadClient pour etablir la connexion
new ThreadClient(connexion, numero).start();

System.out.println("***************************************************************************"+"\n");
System.out.println("Bonjour "+pseudo+", bienvenue sur le Chat de notre equipe de developpement "+"\n");
System.out.println("***************************************************************************");

System.out.println("Connexion etablie!");
System.out.println("Pour sortir tapez : quitter");
System.out.println(pseudo+" peut desormais dialoguer avec les autres personnes connectees."+"\n");

//Tant que le Client n'a pas tapper "quitter", la connexion est toujours etablie
//le mot de passe "quitter" indique la fin d'une connexion
while (true)
{

//String ligne = "test";
String ligne = clavier.readLine();
if (ligne.equalsIgnoreCase("quitter"))
{
sortie.println("quitter");

break;
}

//la sortie du "try" si la connexion au serveur a echouZ, elle est indiquee

//Ecrit dans le flux du serveur(sortie)
if (ligne != null) sortie.println(ligne);
}
}
catch(IOException e) { System.out.println("Erreur client : "+e); }
System.out.println("Connexion terminee...");
}

//la methode getName permet de nous retourner le nom associe � la socket
public String getName()
{
return name;
}
//la methode getSocket nous retourne la Socket
public Socket getSocket()
{
return socket;
}
//setSocket permet de modifier la Socket et de la remplacer
public void setSocket(Socket socket)
{
this.socket = socket;
}
//setName permet de changer le nom attribue � la socket
public void setName(String name)
{
this.name = name;
}




}
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 10:59
Dois je mettre mon code directement dans la la JFrame? A que niveau?
0
Après tu organises ton code comme tu veux mais mon exemple définit la méthode manageChange dans laquelle se trouve un System.err qui affiche ce qui est lu à chaque frappe de touche dans le JTextField.

C'est un exemple qui te permet de comprendre comment récupérer la saisie au fur et à mesure, mais ce n'est pas la correction de ton projet ;)
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 11:30
Quelqu'un peut il m'aider?????
0
Decon Messages postés 91 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 8 octobre 2014 2
5 mai 2010 à 13:42
ok, merci
0