> 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
GratuitJeu PC Galactic Civilizations III gratuit
Valable jusqu'au 28 Janvier

Epic Game Store offre actuellement le jeu PC Galactic Civilizations III. Bâtissez une civilisation qui résistera au passage du temps ! Choisissez parmi une dizaine de races uniques et employez diplomatie, espionnage, technologies et bien plus encore pour vous faire un nom à travers la galaxie.. PEGI 12. Jeu en anglais, texte en français.

Pour télécharger le jeu, connectez-vous sur votre compte Epic Game Store (créez-en un gratuitement si vous n'en n'avez pas) et cliquez sur le bouton Obtenir sur la fiche du jeu. Le jeu sera ajouté définitivement à votre bibliothèque et vous pourrez le télécharger ensuite quand vous voudrez. 


> Voir l'offre
19,63 €Carte mémoire Samsung 128 Go MicroSDXC Evo Select U3 (100 Mo/s) à 19,63 € livrée
Valable jusqu'au 27 Janvier

Amazon Allemagne fait une promotion sur la toute nouvelle carte mémoire Samsung 128 Go MicroSDXC Evo Select U3 qui passe à 15,12 €. Comptez 4,51 € pour la livraison en France soit un total de 19,63 € livrée. Une bonne affaire pour cette carte que l'on trouve ailleurs à partir de 25 € et qui offre des vitesses de 100 Mo/s en lecture et 90 Mo/s en écriture.  Elle est idéale pour les téléphones, caméras et appareils photo 4K. Elle est étanche, anti-choc et résiste aux rayons X et aux champs magnétiques. Elle est garantie 10 ans.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de frais de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
116,90 €TP-Link Deco M4 (WiFi Mesh 1200 Mbit/s, jusqu'à 320 m²) x 3 à 116,90 €
Valable jusqu'au 31 Janvier

Amazon fait une promotion sur le kit TP-Link Deco M4 avec 3 satellites qui passe à 116,99 € livré gratuitement alos qu'on le trouve ailleurs à partir de 150 €. Ces 3 satellites Deco travaillent ensemble pour former un seul et unique réseau WiFi, garantissant une connexion rapide importe où que vous êtes. Ils offrent une connexion Mesh WiFi haut débit de 1200 Mbit/s , la possibilité de connecter + de 60 appareils dans votre foyer jusqu'à 320 m² et sans zone morte (si cela ne suffit pas, ajoutez simplement plus de Deco à tout moment pour augmenter la couverture WiFi), idéal pour toute la maison.


> 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