Récupérer valeur d'un Thread dans des JTextField [Résolu]

cs_nowicki 2 Messages postés lundi 4 juillet 2005Date d'inscription 12 mars 2009 Dernière intervention - 12 mars 2009 à 14:33 - Dernière réponse : cs_nowicki 2 Messages postés lundi 4 juillet 2005Date d'inscription 12 mars 2009 Dernière intervention
- 12 mars 2009 à 17:25
Bonjour.

Depuis quelques semaines je travaille sur un projet et je n'arrive pas à récupérer mes valeurs provenant d'un Thread dans des JTextField.

Je vous explique, je reçois grace à un programme des valeurs sur mon port série et j'aimerais les récupérer dans 4 JTextField.

Exemple : je reçois 10 12 14 15 ...  et j'aimerais que 10 apparaisse dans le premier JTextField puis 12 dans le deuxième JTextField etc ...

Voici mon programme qui affiche les valeurs du port série :

import

java.io.BufferedReader;
import

java.io.IOException;
import

java.io.InputStreamReader;
import

java.util.TooManyListenersException;

import

javax.comm.CommPortIdentifier;
import

javax.comm.NoSuchPortException;
import

javax.comm.PortInUseException;
import

javax.comm.SerialPort;
import

javax.comm.SerialPortEvent;
import

javax.comm.SerialPortEventListener;
import

javax.comm.UnsupportedCommOperationException;

import

com.sun.comm.Win32Driver;

public

class ModeEvenement2
extends Thread
implements SerialPortEventListener {

private CommPortIdentifier
portId;

private SerialPort
serialPort;

private BufferedReader
fluxLecture;

private
boolean
running;

private
byte
codeBarre = 0;

/**

*
Constructeur
qui
récupère
l'identifiant
du
port
et
lance
l'ouverture.

*/

public ModeEvenement2(String port) {

// initialisation du driverWin32Driver w32Driver =

new Win32Driver();w32Driver.initialize();

// récupération de l'identifiant du port

try {

portId = CommPortIdentifier. getPortIdentifier (port);}

catch (NoSuchPortException e) {System.

out.println(
"Erreur 1");

return;}

// ouverture du port

try {

serialPort = (SerialPort)
portId.open(
"ModeEvenement", 20000);}

catch (PortInUseException e) {System.

out.println(
"Erreur ouverture");

return;}

// récupération du flux

try {

fluxLecture =
new BufferedReader(
new InputStreamReader(
serialPort.getInputStream()));

// fluxLecture = new InputStream(serialPort.getInputStream());

// fluxLecture = new InputStreamReader(serialPort.getInputStream());}

catch (IOException e) {System.

out .println(
"Erreur récupération");

return;}

// ajout du listener

try {

serialPort.addEventListener(
this);}

catch (TooManyListenersException e) {System.

out.println(
"Erreur listener");

return;}

// paramétrage du port

serialPort.notifyOnDataAvailable(
true);

try {

serialPort.setSerialPortParams(4800, SerialPort.
DATABITS_8,SerialPort.

STOPBITS_1, SerialPort.
PARITY_NONE);

serialPort.setFlowControlMode(SerialPort.
FLOWCONTROL_NONE);}

catch (UnsupportedCommOperationException e) {System.

out.println(
"Erreur 102");

return;

}

System.

out.println(
"port ouvert, attente de lecture");}

public
void run() {

running =
true;

while (
running = =
true ) {

try {Thread. sleep (2);

}

catch (InterruptedException e) {System.

out.println(
"Erreur 45");

return;

}

}

// fermeture du flux et port

try {

fluxLecture.close();}

catch (IOException e) {System.

out.println(
"Erreur fermeture");

return;}

serialPort.close();}

/**

*
Méthode
de
gestion
des
événements.

*/

public
void serialEvent(SerialPortEvent event) {

// gestion des événements sur le port :

// on ne fait rien sauf quand les données sont disponibles

switch (event.getEventType()) {

case SerialPortEvent.
BI:

case SerialPortEvent.
OE:

case SerialPortEvent.
FE:

case SerialPortEvent.
PE:

case SerialPortEvent.
CD:

case SerialPortEvent.
CTS:

case SerialPortEvent.
DSR:

case SerialPortEvent.
RI:

case SerialPortEvent.
OUTPUT_BUFFER_EMPTY:

break;

case SerialPortEvent.
DATA_AVAILABLE:

try {

// lecture du buffer et affichage

codeBarre = (
byte)
fluxLecture.read();

// System.out.printf("-- %02x %d \n ", codeBarre, codeBarre);System.

out.print(
codeBarre +
" ");

}

catch (IOException e) {System.

out.println(
"Erreur lecture");

return;}

break;}

}

/**

*
Permet
l'arrêt
du
thread

*/

public
void stopThread() {

running =
false ;}

public
byte getCodeBarre() {

return
codeBarre;}

/**

*
Méthode
principale
de
l'exemple.

*/

public
static
void main(String[] args) {

// Récuperation du port en argumentString port =

"COM1";

// lancement de l'appliModeEvenement modeEve =

new ModeEvenement(port);
modeEve.run();

modeEve.stopThread();

}

}

et le deuxième programme possède 4 JTextField avec dedans chaque valeur.

Si quelqu'un aurait une petite idée ...
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 12 mars 2009 à 15:37
3
Merci
Salut,

Je ne vois aucunement de JTextField dans ton code, mais bon...

Le principe est de faire des fonctions dans ta classes possèdant les JTextField afin de pouvoir les modifier, par exemple :

public void setTextFieldText(String text) {
    tonTextField.setText(text);
}

et ensuite, dans ta classe thréadée, il te suffit d'appeler cette fonction :

taClassePossedantLesTextField.setTextField("le nouveau texte");
______________________________________
DarK Sidious

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 118 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
cs_nowicki 2 Messages postés lundi 4 juillet 2005Date d'inscription 12 mars 2009 Dernière intervention - 12 mars 2009 à 17:25
0
Merci
Merci pour ton aide !!!
Commenter la réponse de cs_nowicki

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.