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

Résolu
cs_nowicki Messages postés 2 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 12 mars 2009 - 12 mars 2009 à 14:33
cs_nowicki Messages postés 2 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 12 mars 2009 - 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 ...

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 mars 2009 à 15:37
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
3
cs_nowicki Messages postés 2 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 12 mars 2009
12 mars 2009 à 17:25
Merci pour ton aide !!!
0
Rejoignez-nous