[Thread] besoin sleep(delay)... car java mobilise CPU
Bonjour
J'ai fais un programme simple qui m'affiche des lignes dont les cordonnées varient.
Mon pb : apparemment quand on fait une boucle infinie dans le
'public void paint(Graphics g) {' cela prend plus de 50% du CPU et donc Windows se bat pour afficher les fenêtres des appli ouvertes et je dois faire avec peine un 'fin de tâche' sur IE pour fermer le browser.
(Avec les Applets de démo dont je dispose tout va bien).
Comment svp intégrer la fonction sleep(delay) pour "endormir" un peu l'exécution du prog ?
MERCI
Ex de CODE:
while(continu==1) {
i++; if (i==100) {i=1;col++;
if (col==2) col=0;
if (col==0) g.setColor(Color.red);
if (col==1) g.setColor(Color.blue);}
g.drawLine(1,1,i,100); }
Re: besoin sleep(delay)... car java mobilise CPU
Citation:
Envoyé par thierry198
apparemment quand on fait une boucle infinie dans le 'public void paint(Graphics g)' cela prend plus de 50% du CPU
je ne comprend pas trop le sens d'une boucle infinie dans le paint()... même pas du tout !
la méthode paint() est censé réaliser comme travail l'affichage des différents dessins et leur mise à jour... Si tu as vraiment besoin d'une boucle infinie, mets-la autour de tes appels à paint() ou repaint()
ensuite pour "calmer la bête" dans un boucle infinie, tu peux utiliser
Code:
1 2 3 4 5 6
|
try{
Thread.sleep(100); // sleep de 100 ms
}catch(InterruptedException e){
e.printStackTrace();
} |
mais je pense que tu devras bientôt recourir au multi-threading... :wink:
Pb : repaint() efface l'écran...
En effet cela bloque IE et du coup Windows est très mal en point tant que je ne fais pas un 'fin de tâche de IE'.
J'ai "réussi" le petit prog suivant (fini les pb de cpu!) mais le défaut (qui peu être des fois une qualité) c'est que le repaint() m'efface l'écran avant de ré-exécuter le 'public void paint(Graphics g) {'.
quelle est svp la fonction qui permet de ré-exécuter le 'public void paint(Graphics g) {' sans effacer le contenu de mon applet ?
Merci
Voici mon code :
public class Applet_essai extends java.applet.Applet implements Runnable
{
Thread mon_thread = null;
int delay=100; int a=0;
public void paint(Graphics g) {
super.paint(g);
a = (int)( 500 * Math.random());
g.drawLine(1,1,700,a);
}
public void start() {
mon_thread = new Thread(this);
mon_thread.start();
}
public void run() {
Thread me = Thread.currentThread();
while (mon_thread == me) {
try {
Thread.currentThread().sleep(delay);
}
catch (InterruptedException e) { }
repaint();
}
}
}
Re: Pb : repaint() efface l'écran...
Citation:
Envoyé par thierry198
quelle est svp la fonction qui permet de ré-exécuter le 'public void paint(Graphics g) {' sans effacer le contenu de mon applet ?
ce n'est pas le repaint() qui t'efface ton applet, mais bel et bien le paint()
repaint() ne fait qu'appeler paint() et paintComponent() (et aussi 2-3 autres trucs je sais plus trop)
mais la méthode qui efface c'est paint()...
tu pourrais peut-être utiliser le double buffering si les problème de clipping sont trops importants...
http://java.developpez.com/faq/java/...oublebuffering