Pb de thread

Signaler
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
-
salut all, je n'ai jamais utilise des thread mais g qd meme essaye, mais mon applet ne se rafraichit pas :(. Comme c cense etre un compte a rebours, si le temps change pas ca sert a rien...
voila mon bout de code si qqn pourrai me dire ce qu'il ne va pas a mon avis ce n'est qu'un detail.. merci :)

public class AppletTemps extends Applet implements Runnable {
private Integer Heures;
private Integer Minutes;
private Integer Secondes;
private int Heu;
private int Min;
private int Sec;
private Thread t ;


public AppletTemps(){
setFont(new Font("Courrier",Font.BOLD,14));
setForeground(Color.white);
t = new Thread(this);
}

public void init() {
Heu = Heures.parseInt(getParameter("Heures"));
Min = Minutes.parseInt(getParameter("Minutes"));
Sec = Secondes.parseInt(getParameter("Secondes"));
}

public void run() {
boolean i = true;
while(i) {

Sec--;

if (Sec == -1)
{ Sec = 59; Min--;}
if ((Min== -1)&&(Heu> 0))
{ Sec=59; Min=59; Heu--;}
if ((Min== -1)&&(Heu< 0))
{ Sec=59; Min=0; }
if (Heu == -1)
{ Sec=59; Min=59; Heu=0;}
if((Sec == -1)&&(Min== -1)&&(Heu == -1))
{i = false;}

try {t.sleep(1000);}
catch (InterruptedException signal) { }
}
repaint() ;
}

public void play() {
}

public void paint(Graphics g) {
String ch0="";
String ch1="";
String ch2="";
ch0 = ch0.valueOf(Heu);
ch1 = ch1.valueOf(Min);
ch2 = ch2.valueOf(Sec);
g.clearRect(0,0,getSize().width,getSize().height);
g.drawString(ch0, 2, 15);
g.drawString(" heures", 20, 15);
g.drawString(ch1, 90, 15);
g.drawString(" minutes", 110, 15);
g.drawString(ch2, 180, 15);
g.drawString(" secondes", 200, 15);
repaint() ;
}


public void destroy() {
}

}.

34 réponses

Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
La méthode sleep() est statique tu peut donc faire Thread.sleep(...);

Thread t;

est donc inutile.
Le mieux est que dans ton constructeur tu mettes:
public AppletTemps(){ 
...
new Thread(this).start();
}

Et oui tu as oublié de démmarer le thread en appelant sa méthode start()

Sinon le reste a l'air correct.

Core Breaker :)
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

merci ca marche mais g un autre pb maintenant l'affichage est tout saccade je pense ke ca viens de repaint()
il faut que je le place ou exactement dans run ou dans paint??
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
je sais pas si c,est moi, mais pourquoi tout le monde utilise des graphics pour afficher du texte et des image ??? un jlabel, ça prend pas vraiment plus de mémoire, ça permet de faire la même chose, c'est même aussi flexible pis en plus, tu as pas ce genre de problème et pour finir, tu peut le mettre dasn un thread et ça va fonctionner et te donner exactement le même résultat
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

tu pe pa m'expkiker comment plz je debute en graphisme...
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
tu position ton jlabel avec setbound
ensuite, tu l'ajoutes à ton frame

et si tu veux faire changer la valeur, c,est nom_du_jlabel.settext()

si tu veux ajouter une image, c,est seticon()

c'est tout et si en plus tu utulise un compilateru qui fabrique l'interface graphique comme jbuilder ou eclipse, tu le position avec l'éditeur pis il te reste seulement à ajuster ton texte, tout est automatique

tu as juste à regarder les source sur le site, c,est rpesque tout fait comme ça
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

-------------------------------
Réponse au message :
-------------------------------

> tu position ton jlabel avec setbound
> ensuite, tu l'ajoutes à ton frame
>
> et si tu veux faire changer la valeur, c,est nom_du_jlabel.settext()
>
> si tu veux ajouter une image, c,est seticon()
>
> c'est tout et si en plus tu utulise un compilateru qui fabrique l'interface graphique comme jbuilder ou eclipse, tu le position avec l'éditeur pis il te reste seulement à ajuster ton texte, tout est automatique
>
> tu as juste à regarder les source sur le site, c,est rpesque tout fait comme ça
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > tu pe pa m'expkiker comment plz je debute en graphisme...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > je sais pas si c,est moi, mais pourquoi tout le monde utilise des graphics pour afficher du texte et des image ??? un jlabel, ça prend pas vraiment plus de mémoire, ça permet de faire la même chose, c'est même aussi flexible pis en plus, tu as pas ce genre de problème et pour finir, tu peut le mettre dasn un thread et ça va fonctionner et te donner exactement le même résultat
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > >
> > > > merci ca marche mais g un autre pb maintenant l'affichage est tout saccade je pense ke ca viens de repaint()
> > > > il faut que je le place ou exactement dans run ou dans paint??
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > La méthode sleep() est statique tu peut donc faire Thread.sleep(...);
> > > > >
> > > > >
Thread t;

> > > > > est donc inutile.
> > > > > Le mieux est que dans ton constructeur tu mettes:
> > > > >
public AppletTemps(){ 
> > > > > ...
> > > > > new Thread(this).start();
> > > > > }
> > > > > 

> > > > > Et oui tu as oublié de démmarer le thread en appelant sa méthode start()
> > > > >
> > > > > Sinon le reste a l'air correct.
> > > > >
> > > > > Core Breaker :)
> > > > >
> > > > >
> > > >
> > >
> >
>
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

g essaye mais g fai une erreur qq part l'applet marche plus
regarde ma source plz c gentile :) :)

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Integer;
import java.net.URL;

public class AppletTemps extends Applet implements Runnable {

private Integer Heures;
private Integer Minutes;
private Integer Secondes;
private int Heu;
private int Min;
private int Sec;
private JLabel affichage = new JLabel();
private String s ;

public AppletTemps(){
setFont(new Font("Courrier",Font.BOLD,14));
setForeground(Color.white);
new Thread(this).start();
}

public void init() {
Heu = Heures.parseInt(getParameter("Heures"));
Min = Minutes.parseInt(getParameter("Minutes"));
Sec = Secondes.parseInt(getParameter("Secondes"));
}

public void run() {
boolean i = true;
while(i) {

Sec--;

if (Sec == -1)
{ Sec = 59; Min--;}
if ((Min== -1)&&(Heu> 0))
{ Sec=59; Min=59; Heu--;}
if ((Min== -1)&&(Heu< 0))
{ Sec=59; Min=0; }
if (Heu == -1)
{ Sec=59; Min=59; Heu=0;}
if((Sec == -1)&&(Min== -1)&&(Heu == -1))
{i = false;}

afficher() ;

try {Thread.sleep(1000);}
catch (InterruptedException signal) { }
}
}

public void afficher() {
String ch0="",ch1="",ch2="";
ch0 = ch0.valueOf(Heu);
ch1 = ch1.valueOf(Min);
ch2 = ch2.valueOf(Sec);
s = (ch0 + " heures " + ch1 + " minutes " + ch2 + " secondes");
affichage.setText (s) ;
}

public void paint(Graphics g) {
/*
g.clearRect(0,0,getSize().width,getSize().height);
g.drawString(ch0, 2, 15);
g.drawString(" heures", 20, 15);
g.drawString(ch1, 90, 15);
g.drawString(" minutes", 110, 15);
g.drawString(ch2, 180, 15);
g.drawString(" secondes", 200, 15);
*/
affichage.getText() ;
repaint() ;
}


public void destroy() {
}

}
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
simple, tu es sur un applet et non un japplet. tu utilises AWT et non swing

donc en théorie (j'utilise toujours swing) tu as seulement à enlever les "J" donc au lieu de jlabel, c'est label

habituellement j'aurais dit d'utiliser swing, mais parait sur internet, ceux qui utilise la VM de microsoft ont de la misère à supporter swing qui est de Sun.
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

es-tu sur d'aoir bien regarde mon code ?
g bien remplace JLabel par Label et maintenant ca ecrit applet demarre. de ce cote la ca a mais l'affichage fait un rectangle gris et ya rien ki s'affiche dedans :/ !!!!!!
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
ben peut pas dire, en modifiant ton code, presque tout devrais avoir changer
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

oinnn jy arriverai jamaiiiiiiiiiiiiiis !!!!!!!!!! :(:(:(:(:(
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Essaie de reduire la valeur d'appel de sleep

Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Ca a l'avantage de ne pas poivoir faire un copier coller si on veut pas qu'un utilisateur fasse un copier coller dessus afin de garder disponible des informations seulement au travers de l'application. Ce qui permet de garder des informations confidentielles.

Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Avec le plug-in java maintenant on peut utiliser swing sans problème car les applet utilise le plug-in et ne passe plus par la Microsoft VM mais il est vrai que son utilisation ne s'est pas encore généralisé il faudra attendre un peu.

Core Breaker :)
Messages postés
21
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
3 août 2010

bah non le sleep doit durer 1 seconde donc 1000
ya un truc ki doit foirer ds mon code c tout.......
mais je riske pas de trouver je debute je c pa bien comment ca marche tt ca...
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Essaie;
import java.awt.Label;
import java.applet.Applet;

public class AppletTemps extends Applet implements Runnable {

private Integer Heures;
private Integer Minutes;
private Integer Secondes;
private int Heu;
private int Min;
private int Sec;
private Label affichage = new Label();

public void init() {
Heu = Heures.parseInt(getParameter("Heures"));
Min = Minutes.parseInt(getParameter("Minutes"));
Sec = Secondes.parseInt(getParameter("Secondes"));
afficher();
add(affichage);
new Thread(this).start(); 
}

public void run() {
boolean i = true;
while(i) {

Sec--;

if (Sec == -1) 
{ Sec = 59; Min--;}
if ((Min== -1)&&(Heu> 0))
{ Sec=59; Min=59; Heu--;}
if ((Min== -1)&&(Heu< 0))
{ Sec=59; Min=0; }
if (Heu == -1)
{ Sec=59; Min=59; Heu=0;}
if((Sec == -1)&&(Min== -1)&&(Heu == -1))
{i = false;}
afficher();

try {Thread.sleep(1000);}
catch (InterruptedException signal) { }
}
}

public void afficher()
{
affichage.setText("" + Heu + " heures " + Min + " minutes " + Sec + " secondes");
}

}


Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Oublie mon message précédent dragon avec un JLabel tu ne peux pas non plus faire de copier-coller.

Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Bah non il peut aussi durrer 100ms, le rafraichissement de feras 10 fois plus vite donc logiquement ça ne dois plus saccader essaie toujours et vois si ca saccade toujours ca ne coute rien d'essayer ca ne vas pas faire planter ton système je te le garantit.

Core Breaker :)
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
ben là, c,est vraiment pas difficille, regarde les sources sur le réseau, tu en a pliens qui affiche des images ou du texte et qui utilise des thread aussi
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
6
comme corebreaker a fait, c,est pas plus compliquer que ça