Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3176 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] [LeJOS] Probleme de Listener en parallèle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] [LeJOS] Probleme de Listener en parallèle

n°962577
Olivier180
Posté le 26-01-2005 à 11:26:42  profilanswer
 

Bonjour,
 
J'essaie actuellement de programmer un robot en LeJOS (Java pour Lego).
J'utilise pour cela des Listener commandant des Thread, et je souhaiterais que l'un des listener ait toujours la priorité sur l'autre, qu'il puisse ainsi l'interrompre (eviter de rentrer dans un mur par exemple).  
Cependant, j'aimerais qu'une fois l'execution du listener prioritaire terminée, la classe qui avait été interrompue reprennent là où elle en etait.
J'ai déjà essayé setPriority() mais cela ne change rien.
Voila ce qui se passe :  
Le robot commence normalement le programme, ne se cogne pas dans les mur tant que l'autre listener n'est pas activé, mais quand j'active l'autre listener, le robot bug.
Je pense qu'il est possible d'utiliser des Synchronize, mais je ne connais pas la syntaxe et ne vois pas trop comment l'inclure dans l'architecture du programme.
Désolé d'avoir été aussi long, et merci d'avance pour vos réponse.
 
Olivier.
 

mood
Publicité
Posté le 26-01-2005 à 11:26:42  profilanswer
 

n°962587
benou
Posté le 26-01-2005 à 11:40:10  profilanswer
 

tu ne peux pas intérompre le déroulement normal d'un thread depuis un autre thread ... il faut que le thread en question ait été prévu de façon à ce qu'on puisse lui signaler qu'il doit faire autre chose. En gros, il doit être à l'écoute d'evenement qui vont lui dire d'arrêter ce qu'il est en train de faire et de faire autre chose.


---------------
ma vie, mon oeuvre - HomePlayer
n°962629
the real m​oins moins
Posté le 26-01-2005 à 12:29:26  profilanswer
 

lejos [:xx_xx]  
 
 
[:blueflag] ! olivier180, fait peter des tofs et des bouts de code! :love:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°962805
Olivier180
Posté le 26-01-2005 à 14:54:10  profilanswer
 

Merci.
 
Comme je n'ai pas trouvé de solution, j'ai essayé de simplifier le problème. J'ai maintenant 1 seul listener, et un programme main.
Dans le programme main, le robot tourne a l'infini et est à l'écoute du listener. Le listener affiche la zone dans laquelle se trouve le robot. Cependant, au bout d'un moment, j'obtiens une erreur, et je pense que c'est un "OutOfmemory"  
(J'obtiens une erreur 0068^5, 0068 etant la signature d'un statechanged)
 
Voila le code:
 
Main :
 
public class Ebauche {
 
 public static void main(String[] args) {
 
  Sensor.S2.activate();
 
  Sensor.S2.setTypeAndMode(3,0x80);
   
  Sensor.S2.addSensorListener(new Listen());
 
  Motor.A.setPower(7);
  Motor.C.setPower(7);
 
  while (true) {
   Mouvements.RotateRight();
  }
 }
}
 
 
listener :
 
public class Listen implements SensorListener {
 
 public void stateChanged(Sensor s, int old, int nu) {
   
  if (nu < 40) {
   TextLCD.print("Noir" );
  }  
   
  else if (44 < nu && nu < 47) {
   TextLCD.print("fonce" );
  }  
   
  else if (46 < nu && nu < 50) {
   TextLCD.print("clair" );
  }  
   
  else if (49 < nu && nu < 53) {
   TextLCD.print("tclair" );
  }  
   
  else if (52 < nu) {
   TextLCD.print("bord" );
  }

n°962815
benou
Posté le 26-01-2005 à 15:04:13  profilanswer
 

je vois pas trop où ton prog pourrait faire un outofmemory ...


---------------
ma vie, mon oeuvre - HomePlayer
n°962817
the real m​oins moins
Posté le 26-01-2005 à 15:05:17  profilanswer
 

bah faut voir ce que font toutes ces methodes statiques qu'il appelle...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°962826
Olivier180
Posté le 26-01-2005 à 15:13:56  profilanswer
 

Merci
voici la classe que j'ai créé pour simplifier les commandes de déplacement:
 
import josx.platform.rcx.*;
 
import java.lang.*;
import java.util.*;
 
public class Mouvements {
 
 public static void GoForward() {
  Motor.A.forward();
  Motor.C.forward();
 }
 
 public static void GoBackward() {
  Motor.A.backward();
  Motor.C.backward();
 }
 
 public static void TurnLeftForward() {
  Motor.C.forward();
  Motor.A.stop();
  AngleRotation.Angle=AngleRotation.Angle-1;
 }
 
 public static void TurnRightForward() {
  Motor.C.stop();
  Motor.A.forward();
  AngleRotation.Angle=AngleRotation.Angle+1;
 }
 
 public static void RotateLeft() {
  Motor.C.forward();
  Motor.A.backward();
  AngleRotation.Angle=AngleRotation.Angle-2;
 }
 
 public static void RotateRight() {
  Motor.C.backward();
  Motor.A.forward();
  AngleRotation.Angle=AngleRotation.Angle+2;
 }
 
 public static void TurnLeftBackward() {
  Motor.C.backward();
  Motor.A.stop();
  AngleRotation.Angle=AngleRotation.Angle+1;
 }
 
 public static void TurnRightBackward() {
  Motor.C.stop();
  Motor.A.backward();
  AngleRotation.Angle=AngleRotation.Angle-1;
 }
 
 public static void Stop() {
  Motor.C.stop();
  Motor.A.stop();
 }
 
 public static void FinalStop() throws InterruptedException {
  Motor.A.stop();
  Motor.B.stop();
  Motor.C.stop();
  Sensor.S1.passivate();
  Sensor.S2.passivate();
  Sensor.S3.passivate();
  LCD.clear();
  TextLCD.print("oui" );
  Sound.beepSequence();
  Thread.sleep(1000);
 }
 
 public static boolean CheckPressure() {  
  return Sensor.S3.readBooleanValue();
 }
 
 public static int CheckLight1() {
  return Sensor.S1.readSensorValue(0, 100);
 }
 
 public static int CheckLight2() {
  return Sensor.S2.readSensorValue(0, 100);
 }
}

n°962828
benou
Posté le 26-01-2005 à 15:14:47  profilanswer
 

ca a l'air d'être des fonctions de bases de l'API lejos ... pas de quoi faire un OOM à mon (humble) avis ...
 
edit : j'ai rien dit [:petrus]


Message édité par benou le 26-01-2005 à 15:15:15

---------------
ma vie, mon oeuvre - HomePlayer
n°963112
Jubijub
Parce que je le VD bien
Posté le 26-01-2005 à 21:03:19  profilanswer
 

Excellent !!!
 
Mon ex fac de Kent a collaboré à ce projet !!! J'ai tilté en me souvenant des affiches sur les bureaux des profs...
Ils ont dével cette API :  
http://www.cs.kent.ac.uk/people/staff/djb/rcx/
 
(ma prof est d'ailleurs la première personne citée dans le texte, son trip de recherche c les environnements assistés d'initiation à l'informatique...on a d'ailleurs appris le java avec une sorte d'abstraction qu'elle avait faite, qui permettait de se concentrer purement sur la logique Objet)


---------------
Jubi Photos : Flickr - 500px

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] [LeJOS] Probleme de Listener en parallèle

 

Sujets relatifs
Problème de droits d'un partageProbleme de l'executable
Programmation java: Pour debuter Y a quoi ?probleme dll
[Java][POI][HSSF] Faire des cadres simplements[RESOLU]Probleme saut de page et colonnes
[java]faire fonctionner 2 tomcat different sur la meme machine[DREAMWEAVER] Probleme d'affichage sous IE6.0
Probleme passage de paramètres et fonction includeProbleme de page sur mon site
Plus de sujets relatifs à : [Java] [LeJOS] Probleme de Listener en parallèle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR