comment ralentir une boucle dans java

Signaler
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011
-
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011
-
salut à tous;
voilà j'ai une jframe dans laquelle ce trouve un TextArea et un button quand je clique sur le button le contenu d'un fichier txt s'affiche ligne par ligne dans TextArea grâce à une boucle mais l'affichage est rapide.
j'aimerai savoir comment faire pour que ma boucle quand elle affiche une ligne attend 0.5 seconde puis elle affiche la seconde ligne.
Est-ce possible ?

voici ma boucle :

while ((ligne=br.readLine())!=null){

sb.append(ligne);
sb.append("\n");
ligne=br.readLine();
}
merci pour vos réponse

9 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Bonjour,

Pour celà, je te conseil d'utiliser un thread qui affiche chacune des lignes. Heureusement que c'est moi qui t'ai donné ce code sur un autre sujet sinon, je n'aurais pas compris ce que tu faisais.

Je te conseil d'utiliser cette source : http://www.javafr.com/codes/LIRE-ECRIRE-FICHIERS-TEXTE_52348.aspx

De cette manière, tu pourras récupérer le contenu d'un fichier texte dans une arrayList.

Ensuite, tu peux faire une boucle comme celle-ci :
int curentPos=0;
while(curentPos<lignes.size()){
   textArea.setText(textArea.getText()+"\n"+lignes.get(curentPos));
   textArea.repaint();
   //Attente de 500 mili secondes
   //Il y a une exception à catcher
   Thread.sleep(500);
   curentPos++;
}

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Il manque une ligne avec int curentPos=0 :

List<String> lignes=GestionFichiers.lireFichier("C:\\fichier.txt");
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011

Merci Julien39 je vais jeter un coup d'oeil dessus
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011

Bonsoir julien 39
encore merci de m'avoir aidé mais ce que j'ai remarque que lorsque j'appuis sur Button1 il y'a un temps d’attente long puis soudainement tous le contenu du fichier s'affiche sur JtextArea.
moi j'aimerai bien que la première ligne du document texte s'affiche puis un petit temps d'attente ensuite la deuxième ligne s'affiche puis un temps d'attente et ainsi de suite jusqu'à ce que le contenu de mon fichier s'affiche sur JTextArea.
Est_ce que c'est possible ?
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Ta fenêtre ne doit pas être rafraichie entre deux itérations de la boucle.

Peux tu me montrer ton code, je te donnerai un code qui gère proprement les Threads pour faire ca. Par contre, il va falloir attendre demain après midi.

a+
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011

voici le code quand je clique sur button1
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         List<String> lignes=GestionFichiers.lireFichier("C:\\exemple.txt");
         int curentPos=0;
          while(curentPos<lignes.size()){
               jTextArea1.setText(jTextArea1.getText()+"\n"+lignes.get(curentPos));
               jTextArea1.repaint();
            try {
                Thread.sleep(50);
                curentPos++;
            } catch (InterruptedException ex) {
                Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
               
              
}
    }    


et ceci est la classe Gestion_Fichiers
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

public class GestionFichiers {
public static List<String> lireFichier(String nomFichier){
BufferedReader fluxEntree=null;
String ligneLue;
List<String> lignes = new ArrayList<String>();
try{
fluxEntree = new BufferedReader(new FileReader(nomFichier));
ligneLue = fluxEntree.readLine();
while(ligneLue!=null){
lignes.add(ligneLue);
ligneLue = fluxEntree.readLine();
}
}
catch(IOException exc){
exc.printStackTrace();
}
try{
fluxEntree.close();
}
catch(IOException e){
e.printStackTrace();
}
return lignes;
}
}


encore Merci julien39
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        List<String> lignes=GestionFichiers.lireFichier("C:\\exemple.txt");
        AnimationListe animateur = new AnimationListe(lignes, jTextArea1);
        animateur.start();
    }


public class AnimationListe extends Thread {

    private List<String> contenu;
    private JTextArea zoneTexte;

    public AnimationListe(List<String> contenu, JTextArea zoneTexte){
        this.contenu=contenu;
        this.zoneTexte=zoneTexte;
    }

    @Override
    public void run(){
        int curentPos=0;
        while(curentPos<contenu.size()){
            zoneTexte.setText(zoneTexte.getText()+"\n"+contenu.get(curentPos));
            zoneTexte.repaint();
            try {
                Thread.sleep(500);
                curentPos++;
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }

}
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
362
Sur l'ordinateur que j'utilise, je n'ai pas installé de compilateur java, je n'ai donc pas testé, il y a peut être quelques petites erreurs que tu rectifiera facilement je pense
Messages postés
14
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
26 décembre 2011

Merci Julien39 ça marche très bien tous est en règle .