Suspendre et reprendre un thread avec un applet?

Fermé
stevengren Messages postés 164 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 11 décembre 2012 - Modifié par stevengren le 11/12/2012 à 03:34
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 déc. 2012 à 14:42
Bonjour,

j'aimerais comprendre comment suspendre un thread, pour un temps indéterminé, et ensuite le reprendre et cela à l'aide d'une applet contenant vous l'avez deviner un bouton suspendre et reprendre. J'ai compris comment suspendre mon thread à l'aide de wait() mais sa se complique lorsque je tentes d'utiliser l'applet pour lancer le wait durant l'execution du thread.

Voici le code de mon thread

mon thread écrit simplement le mot test 500 fois dans la console

public class ThreadImpress extends Thread{
public static boolean pause = false;
public ThreadImpress(){

}
public static void pause(){
pause = true;
}
public static void unpause(){
pause = false;
synchronized(Thread.currentThread()){
Thread.currentThread().notify();
}
}

public void run(){
while(true){

try{
for (int i=0;i<500;i++){
if (pause){
synchronized(this){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
System.out.println("test");
Thread.sleep(30);
}



}
catch(InterruptedException exc){
System.out.println(exc);
}
}
}



public static void main(String[] args){
ThreadImpress th1= new ThreadImpress();
th1.start();
}
}

Et voici le code de mon applet



public class Start extends Applet implements ActionListener{

public static boolean suspend= true;
public void init(){
this.setLayout(new FlowLayout());
JButton b = new JButton("Suprendre");
JButton d = new JButton("Reprendre");
b.addActionListener(this);
b.setActionCommand("b");
d.addActionListener(this);
d.setActionCommand("d");
this.add(b);
this.add(d);
ThreadImpress th1= new ThreadImpress();
th1.start();



}

@Override
public void actionPerformed(ActionEvent arg0) {
if (arg0.getActionCommand().equals("b")){
ThreadImpress.pause();


}
else if(arg0.getActionCommand().equals("d")){

ThreadImpress.unpause();

}
}

Lors de l'execution de mon applet le thread se lance et le bouton suspendre l'arreter mais impossible de reprendre le traitement. Aucune erreur n'est lancer? Biensure j'utilise la commmande notify!

Merci

}



1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
11 déc. 2012 à 14:42
C'est compliqué tout ça !

public class ThreadImpress extends Thread
{
    public void run()
    {
        for (int i=0; i<100; i++)
        {
            System.out.println("test "+i);
            try { Thread.sleep(100); } catch (InterruptedException e) {}
        }
    }
}

public class Start extends Applet
{        
    public void init()
    {
        setLayout(new FlowLayout());
        
        final ThreadImpress thread = new ThreadImpress();
    
        JButton suspend = new JButton("Suspendre");
        suspend.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                thread.suspend();
            }
        });
        add(suspend);
        
        JButton resume = new JButton("Reprendre");
        resume.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                thread.resume();
            }
        });
        add(resume);
        
        thread.start();    
    }
}

Remarque : les méthodes suspend(), et resume() sont dépréciées, mais vu ce que tu fais ici ça n'a pas grande importance, tu peux les laisser comme ça. Si tu veux les remplacer quand même, tu peux regarder cet article : Java Thread Primitive Deprecation.
0