Rafraichissement forcé

maitredede Messages postés 153 Date d'inscription vendredi 9 août 2002 Statut Membre Dernière intervention 18 septembre 2009 - 31 mai 2005 à 14:48
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 - 31 mai 2005 à 16:16
Bonjour

Dans un applet (AWT) je fait de l'envoie de fichiers. Comment puis-je faire pour forcer le rafraichissement de la fenêtre (qu'elle soit redessinée) afin que ma barre de progression (faite maison) soit visible, à mesure que l'envoie avance ?

4 réponses

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
31 mai 2005 à 15:25
Le probleme ne vient peut-être pas de là ou tu penses... plutôt que de
faire des repaints de partout va voir : (désolé pour la pub pour un
autre site...)

Les Traitements Longs

Une solution consisterait à gérer l'envoi du fichier et le rafraichissement dans 2 processus séparés.
0
maitredede Messages postés 153 Date d'inscription vendredi 9 août 2002 Statut Membre Dernière intervention 18 septembre 2009
31 mai 2005 à 15:44
J'ai rien contre la pub, au contraire, je suis pour le partage des connaissances...



Dans ce cas, comment dois-je faire pour lier le thread qui va faire mon traitement à mon appli ?



Dans mon appli, je fait l'envoi selon cet algo :



Pour chaque image :

- la convertir en JPG

- créer la requète HTTP complète (headers+contenu) simulant un formulaire

- envoyer la requète

- attendre et traiter le code de réponse du script



Donc entre chaque image, je veux faire avancer ma barre de progression.



Si je t'ai bien compris, je dois faire un thread qui va se charger de l'envoie.

Sachant que pendant mon envoie, mon applet doit être désactivé, comment je fait pour lier mon applet et mon thread ?
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
31 mai 2005 à 16:03
//et bien par exemple,(il existe d'autre solutions) tu fais tes traitement dans un thread



class PanelAvecProgressBar extends JPanel{



JProgressBar barre ;



public PanelAvecProgressBar (){

barre = new JProgressBar() ;

this.add( barre la ou tu veux);

}



public void commencerTraitement(){

new MesTraitements ();

}



//et ton thread (je fais une sous classe mais tu peux séparer) :



class MesTraitements extends Thread {



public MesTraitements(){

this.start() ;

}

public void run(){

while( ya des images )

{

- la convertir en JPG

- créer la requète HTTP complète (headers+contenu) simulant un formulaire

- envoyer la requète

- attendre et traiter le code de réponse du script

- avancer la progressBar de progressBar.getMaximum / nbImage , repaint barre

}

}



}//fin de classe MesTraitements

}//fin de classe FenetreAvecProgressBar



En gros, si ta 10 images avec une progressbar qui va de 0 à 100, il
faudra avancer de 10 a chaque passage. Ou alors tu peux utiliser un
systeme de compteur, c'est toi qui vois.

j'essaye de trouver un exemple que j'avais fait et je peux le poster si tu veux...
0
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
31 mai 2005 à 16:16
Tiens, si ce bout de code peut te mettre sur la bonne voie :

du bon vieux code dégeulasse, mais qui marche... c'est juste pour te donner une idée.



import javax.swing.*;

import java.awt.*;



public class APIBarre extends JFrame {



JProgressBar barre ;

JLabel info = new JLabel("");



public static void main(String[] args){

APIBarre pouet = new APIBarre() ;

}



public APIBarre() {

this.setSize(400 , 100);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.getContentPane().setLayout(new BorderLayout());



barre = new JProgressBar(JProgressBar.HORIZONTAL , 0 , 100);



this.getContentPane().add(info , BorderLayout.WEST);

this.getContentPane().add(barre , BorderLayout.CENTER);



this.setVisible(true);

String[] ts = {"gnagna 1" , "gnagna 2" , "gnagna 3" , "gnagna 4" , "gnagna 5"};

new Traiter(ts);

}





class Traiter extends Thread {

String[] ts ;

public Traiter(String[] ts){

this.ts = ts ;

this.start();

}

public void run(){

for(int i = 0 ; i < ts.length ; i++)

{

barre.setValue( barre.getValue() + barre.getMaximum()/ts.length );

info.setText( ts[i] );

APIBarre.this.repaint();

try{this.sleep(1000);} //simuler un traitement de 1 seconde.

catch(InterruptedException e){}

}

}

}

}
0
Rejoignez-nous