Suspendre et reprendre un thread avec un applet?
stevengren
Messages postés
176
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
}
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
}
A voir également:
- Suspendre et reprendre un thread avec un applet?
- Comment reprendre un message sur whatsapp - Guide
- Récupérer facilement des messages effacés dans WhatsApp - Guide
- Suspendre les mises à jour pendant 7 jours grisé - Guide
- Compte thread - Accueil - Réseaux sociaux
- Le terme «pip» n'est pas reconnu comme nom d'applet de commande, ✓ - Forum Python
1 réponse
C'est compliqué tout ça !
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.
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.