problème de threads

problème de threads - Java - Programmation

Marsh Posté le 09-05-2005 à 12:18:36    

Bonjour j'ai un problème de threads. Voici mon code:
 
Ceci est mon chronometre:

Code :
  1. import java.lang.Thread ;
  2. public class Chronometre extends Thread {
  3. private int secondes = 0 ;
  4. private long attente = 1000 ;
  5. public Chronometre ( ) {
  6. }
  7. public void run ( ) {
  8.  try {
  9.   while ( true ) {
  10.    secondes++ ;
  11.    if ( interrupted ( ) ){
  12.     System.out.println ( "on m a arrete" ) ;
  13.     return ;
  14.    }
  15.    System.out.println( secondes ) ;
  16.    sleep ( attente ) ;
  17.   }
  18.  } catch ( InterruptedException e ) {
  19.   System.out.println ( "on m a arrete par exception" ) ;
  20.   return ;
  21.  }
  22. }
  23. }


 
j'ai une classe jeu avec une méthode lanceChrono ( boolean ) :

Code :
  1. public void lanceChrono ( boolean test ) {
  2.  if ( test ){
  3.  Chronometre chrono = new Chronometre ( ) ;
  4.  chrono.start ( ) ;
  5.  }
  6.  else {
  7.   chrono.interrupt ( ) ;
  8.   }
  9. }


 
La thread se lance bien mais j'ai une NullPointerException quand je ré-appelle la méthode lanceChrono pour interrompre. La NPE est sur:

Code :
  1. chrono.interrupt ( ) ;


 
pourtant chrono est bien déclaré globale à la classe. Je ne comprends pas pourquoi il disparaît

Code :
  1. public class Jeu {
  2. private Chronometre chrono ;
  3. ...


---------------
Du taf dans le Logiciel Libre : https://www.linuxjobs.fr
Reply

Marsh Posté le 09-05-2005 à 12:18:36   

Reply

Marsh Posté le 09-05-2005 à 12:20:36    

normal, la création de ton objet chrono est conditionnelle, donc si il ne se créé pas, il n'existe pas quand tu passes dans ton else !
vire l'instanciation de chrono du if

Reply

Marsh Posté le 09-05-2005 à 12:25:25    

Je viens de voir que je redéclarais en local chronometre avec Chronometre chron = new Chronometre alors que ça devrait être chrono = new Chronometre;
 
C'est la 2nd fois que ça m'arrive ça fait une heure de perdue pfff.
merci en tout cas


---------------
Du taf dans le Logiciel Libre : https://www.linuxjobs.fr
Reply

Marsh Posté le 09-05-2005 à 12:26:58    

Fuat pas écouter Harko, il connaît que le C++ managé et l'ASM :o

Reply

Marsh Posté le 09-05-2005 à 12:46:06    

sinon, y'a la classe java.util.Timer qui est bien ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 09-05-2005 à 12:48:40    

verdoux a écrit :

Fuat pas écouter Harko, il connaît que le C++ managé et l'ASM :o


en même temps, j'ai lu son code en biais, j'ai juste vu un objet créé dans un bloc if/else, donc dés l'instant ou un objet est créé de façon conditionnelle, faut éventuellement s'attendre à une NullPointerException hein [:joce]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed