fermeture thread java - Java - Programmation
Marsh Posté le 15-09-2009 à 13:10:55
(utilise les balises [code=java][ /code] stp, ca sera plus lisible...)
revoie tes concepts de POO, la tu instancie un nouveau thread à arrêter, tu récupére pas celui qui tourne...
en plus (semi hs), ya pas un débat qui dit qu'il vaut mieux passer par l'interface Runnable pour faire des threads?
Marsh Posté le 15-09-2009 à 23:30:13
Tu dois garder la référence à T1 que tu assignes dans demarrerThread().
Ensuite tu appelles T1.interrupt() sur ce même T1 afin de sortir le thread de l'appel à sleep() en levant une InterruptedException.
Marsh Posté le 17-09-2009 à 15:45:29
J'ai suivi les conseilset j'ai essayé com çà , mais il n'arrete toujours pas les threads.
public class myThread implements Runnable{
private Thread T1;
public void Start ( ) {
myThread = new Thread( this );
myThread.start();
}
public void run(){
try{
for (int i=0; i<someThing; i++){
traitement();
Thread.sleep(1000);
}//end for
catch(InterruptedException e){}
}//end try
}//end run
boolean finish = true;
synchronise public void stopThread(){
finish = true;
while(finish){
if (T1.isAlive()){
T1.interrupt();
T1 = null;
}
}
}
}
Marsh Posté le 17-09-2009 à 16:19:35
t'initialise pas T1 la... revois tes bases:
http://alwin.developpez.com/tutorial/JavaThread/
EDIT: et utilise les balise code quand tu postes stp... ca sera plus lisible.
Marsh Posté le 17-09-2009 à 17:44:31
C'est à peine lisible... Je ne comprend rien à ce que tu essayes de faire dans ton code mais je peux te dire que quand tu appelles stopThread() tu vas lever une belle NullPointerException. Dans la boucle de ton run() tu dois également ajouter la condition:
&& !Thread.interrupted()
pour tester si un appel à l'interruption a été fait par le thread principal et ainsi sortir de la boucle si c'est le cas pour que ton Thread puisse se terminer proprement.
Après avoir appelé t1.interrupt(), ton thread continue à fonctionner pendant quelques instants, c'est normal, pas la peine d'appeler t1.interrupt() en boucle. Pour que ton thread principal attende que le thread t1 s'arrête, tu dois appeler t1.join().
Si tu n'as pas encore compris je te conseille de te documenter un peu sur les threads via un bon bouquin.
Marsh Posté le 15-09-2009 à 12:25:26
salut
j'ai un problème pour arreter mes threads . pouvez vous m'aider ? svp
voici mon thread :
public class monThread extends Thread{
public void run (){
try{
for(int i= 0; i<uneValeur; i++){
monTraitement();
Thread.sleep(3000);
}
}catch( InterruptedException e) {
System.out.println ("problem" +e}
}
}
voici la methode pour lancer le thread.
public void demarrerThread(){
monThread T1 = new monThread();
T1.start();
}
voici la methode pour arreter le thread ( NE MARCHE PAS ).
poublic void stoperThread(){
monThread T1 = new monThread();
try{
if (T1.isAlive()){
deconnecteServeur(); // methode pour se deconnecter du serveur
// au fait il s'agit d'une com CLIENT -SERVEUR
T1.Interrupt();
T1 = null;
}
}catch(Exception e){
}
}
MERCI