> Tous les forums > Forum Autres langages
 Problème java (algorithme vers java)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
almofa237
  Posté le 08/05/2010 @ 04:44 
Aller en bas de la page 
Petit astucien

Bonjour,
j ai un problème dans mon programme java. Je vous dit d'abord que fait ce programme: il lit en temps reel du port com.
Ensuite, je n affiche sur la console que les lignes qui commencent par une String: ($GPRMC).
Ce que je veux maintenant, c est que au lieu de lire toujours et en temps reel à partir du com, je ne veux lire qu'apres une demande de l user, par exemple juste apres un click ou un appui sur une lettre.
Apres, si cela est effectué, je ne veux retourner apres le click (ou eventuellement l appui sur une lettre) que la premiere ligne rencontrée qui commence par la String : $gprmc. (j ai pas besoin de touutes les lignes qui viennent apres)
Voici le code que j ai utilisé:

[code]package gpsclass;

import javax.comm.*;

import com.sun.comm.Win32Driver;
import java.io.*;
import java.util.*;
public class Testport extends Thread implements SerialPortEventListener {
private CommPortIdentifier portId;
private SerialPort serialPort;
private BufferedReader fluxLecture;
private boolean running;
/**
* Constructeur qui récupère l'identifiant du port et lance l'ouverture.
*/
public Testport(String port) {
//initialisation du driver
Win32Driver w32Driver = new Win32Driver();
w32Driver.initialize();
//récupération de l'identifiant du port
try {
portId = CommPortIdentifier.getPortIdentifier(port);
} catch (NoSuchPortException e) {
}
//ouverture du port
try {
serialPort = (SerialPort) portId.open("ModeEvenement", 2000);
} catch (PortInUseException e) {
}
//récupération du flux
try {
fluxLecture =
new BufferedReader(
new InputStreamReader(serialPort.getInputStream()));
} catch (IOException e) {
}
//ajout du listener
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
}
//paramétrage du port
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(
9600,
SerialPort.DATABITS_7,
SerialPort.STOPBITS_1,
SerialPort.PARITY_EVEN);
} catch (UnsupportedCommOperationException e) {
}
System.out.println("port ouvert, attente de lecture");

}
public void run() {
running = true;
while (running) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
//fermeture du flux et port
try {
fluxLecture.close();
} catch (IOException e) {
}
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 :
String codeBarre = new String();

try {
//lecture du buffer et affichage

codeBarre = (String) fluxLecture.readLine();
if (codeBarre.startsWith("$GPRMC")) {
System.out.println(codeBarre);

}

}catch (IOException e) {
}
break;
}
}
/**
* Permet l'arrêt du thread
*/
public void stopThread() {
running = false;
}/**
* Méthode principale de l'exemple.
*/
/**
* @param args
*/
public static void main(String[] args) {
//Récuperation du port en argument
//String port = args[0];
//lancement de l'appli
Testport modeEve=new Testport("COM7");
modeEve.start();
//"interface utilisateur"
System.out.println("taper q pour quitter");
//construction flux lecture
BufferedReader clavier =
new BufferedReader(new InputStreamReader(System.in));
//lecture sur le flux entrée.
try {
String lu = clavier.readLine();
while (!lu.equals("q")) {
}
} catch (IOException e) {
}
modeEve.stopThread();
}
}
[/code]

Voila j espere que vous pouvez m aider.
Merci d avance.



Modifié par almofa237 le 08/05/2010 13:11
Publicité
almofa237
 Posté le 08/05/2010 à 13:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour, voici l'idée, reste à la convertir en java:

si l utilisateur appui sur un caractère --> lire du port com --> afficher la 1ere ligne qui commence par une String ($gprmc) --> sortir.

Voila l idée, mais maintenant il faut comment traduire cela en Java.

Merci.

breizhbugs
 Posté le 08/05/2010 à 18:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
almofa237 a écrit :

Bonjour, voici l'idée, reste à la convertir en java:

si l utilisateur appui sur un caractère --> lire du port com --> afficher la 1ere ligne qui commence par une String ($gprmc) --> sortir.

Voila l idée, mais maintenant il faut comment traduire cela en Java.

Merci.

Bonjour,

Je le vois comme ça:

tu déclare un attribut membre privé booléen "enregistre" initialisé a (vrai faux) en fonction de si tu veux enregistrer dès le départ ou apres appuie sur 'E'

Tu modifies ta boucle

try {
String lu;

do

{

lu= clavier.readLine();

if (lu.equals("e"))

{

enregistre = !enregistre // enregistre est un menmbre de classe booléen;

}

}while (!lu.equals("q")) ;

} catch (IOException e) {


//pense a mettre des
System.out.println dans tes catch pour voir si il y a un problême}

et ensuite tu modifies serialevent:

...

try {
//lecture du buffer et affichage

codeBarre = (String) fluxLecture.readLine();
if (codeBarre.startsWith("$GPRMC") && enregistre == true) {
System.out.println(codeBarre);

}

...

almofa237
 Posté le 08/05/2010 à 21:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je te remercie pour le temps que tu as consacré à mon probleme :)

Merci, j ai testé et ca marche :d

Maintenant je veux que l exécution s arrete une fois qu une ligne valide est trouvé. (ligne commence par $gprmc)

algorithme:

Lire du port com --> ligne valide ? --> oui--> l afficher dans la console et arreter l execution (je ne veux plus appuyer sur q pour sortir, je veux que ca soit automatique apres avoir trouvé une ligne valide)

Lire du port com --> ligne valide ? --> non--> continuer à lire, jusqu a trouver une ligne valide

Merci enormement

almofa237
 Posté le 08/05/2010 à 22:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

En fait, voila ce que je veux: je veux travailler directement sur les resultats dans le buffer. Est ce que c est possible deja ?

La ligne valide recue (que j ai expliqué dans le message precedent) dans la console (en buffer), une fois trouvée, je veux ensuite appliquer une methode "split" sur cette ligne etc...

Merci :D

breizhbugs
 Posté le 08/05/2010 à 23:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ta ligne valide se trouve dans codeBarre c'est ça?

Eh bien tu peut faire tes traitements dessus?

almofa237
 Posté le 08/05/2010 à 23:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui c est ce que je veux.

maintenant comment puis je arreter l execution automatiquement comme j ai expliqué dans le message precedent

algorithme:

Lire du port com --> ligne valide ? --> oui--> l afficher dans la console et arreter l execution (je ne veux plus appuyer sur q pour sortir, je veux que ca soit automatique apres avoir trouvé une ligne valide)

Lire du port com --> ligne valide ? --> non--> continuer à lire, jusqu a trouver une ligne valide

Un graaand merci a toi :D :D

breizhbugs
 Posté le 09/05/2010 à 15:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
almofa237 a écrit :

Oui c est ce que je veux.

maintenant comment puis je arreter l execution automatiquement comme j ai expliqué dans le message precedent

algorithme:

Lire du port com --> ligne valide ? --> oui--> l afficher dans la console et arreter l execution (je ne veux plus appuyer sur q pour sortir, je veux que ca soit automatique apres avoir trouvé une ligne valide)

Lire du port com --> ligne valide ? --> non--> continuer à lire, jusqu a trouver une ligne valide

Un graaand merci a toi :D :D

Tu utilise un booléen "trouver" que tu mets a true de la même façon que "enregisre":

do

{

...

}while (!lu.equals("q")&& trouve==false) ;

et dans la foncrtion qui detecte la ligne tu mets trouve à true:

if (codeBarre.startsWith("$GPRMC")) {
System.out.println(codeBarre);
trouve=true;
}

almofa237
 Posté le 09/05/2010 à 16:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Re bonjour,

J ai pu resoudre le probleme. j ai joué sur l affichage.

j ai utilisé "substring" et ca a marché.

Merci beaucoup pour ton aide.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
109,99 €Disque dur Seagate NAS Iron Wolf 4 To à 109,99 €
Valable jusqu'au 18 Janvier

Cdiscount propose le disque dur Seagate IronWolf 4 To à 109,99 €. Ce disque dur 3.5 pouces SATA III est adapté aux NAS et ordinateurs qui fonctionnent 24h/24. On le trouve ailleurs autour de 130 €. 


> Voir l'offre
93,49 €LEGO 31199 Art Iron Man à 93,49 €
Valable jusqu'au 18 Janvier

Amazon fait une promotion sur le set LEGO 31199 Art Iron Man qui passe à 93,49 € livré gratuitement au lieu de 119 €. 3156 pièces pour créer un tableau d'Iron Man (3 modèles sont possibles) de 40 x 40 cm en LEGO. Les plus courageux (et riches ?) pourront acheter et combiner 3 sets pour créer un fabuleux triptyque.


> Voir l'offre
9,99 €Adaptateur Bluetooth USB TP-Link UB400 à 9,99 €
Valable jusqu'au 18 Janvier

Amazon fait une promotion sur l'adaptateur Bluetooth USB TP-Link UB400 qui passe à 9,99 €. Cet adaptateur à brancher sur un port USB va vous permettre d'ajouter le bluetooth à votre ordinateur et d'utiliser ensuite sans fil vos périphériques bluetooth : souris, clavier, casque, manette, téléphone, ...


> Voir l'offre

Sujets relatifs
Convertisseur C++ vers java
probleme jdom java
problème de java
probleme avec des tableChanged en java
probleme de calcul en JAVA
Problème java (pages perso AOL)
probleme de compil. sous java
probleme avec les JTable en java
probleme avec java
probleme avec java
Plus de sujets relatifs à Problème java (algorithme vers java)
 > Tous les forums > Forum Autres langages