Hssy23
Messages postés7Date d'inscriptionjeudi 16 octobre 2014StatutMembreDernière intervention18 août 2015
-
Modifié par KX le 5/11/2014 à 19:14
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024
-
6 nov. 2014 à 19:37
Salut ,
J'ai un long traitement au sein de mon programme, pour cela j'ai utilisé un ProgressBar, mais le problème c'est qu'il se remplie qu'à la fin du traitement. Sachant que la durée de mon traitement n'est pas toujours stable.
Quelqu'un peut m'aider !
Voici un bout de mon code :
private void jTextArea2MouseClicked(java.awt.event.MouseEvent evt) {
final long start = System.currentTimeMillis();
jProgressBar1.setValue(0);
if (evt.getClickCount() == 2)
{
Thread monThread= new Thread()
{
int n = 0;
public void run()
{
try
{
FileOutputStream f = new FileOutputStream("fileResult.txt");
System.setOut(new PrintStream(f));
new Searcher(jTextArea2.getSelectedText()).toString().split("\n");
try
{
InputStream fichier1 = new FileInputStream("fileResult.txt");
InputStreamReader fich1 = new InputStreamReader(fichier1);
BufferedReader br1 = new BufferedReader(fich1);
String ligne;
while ((ligne = br1.readLine()) != null)
{
jTextArea1.append(ligne + "\n");
}
br1.close();
} catch (Exception e) {}
} catch (Exception e) {}
while (n<=start)
{
jProgressBar1.setValue(n);
try {
Thread.sleep(500);
} catch (InterruptedException ex) { Logger.getLogger(Inter.class.getName()).log(Level.SEVERE, null, ex);}
n= n+10;
if (jProgressBar1.getValue()< 100)
jProgressBar1.setValue(n+(100-n));
}
}// fin du void run
}; //fin du thread
monThread.start();
if (!(jTextArea3.getText().equalsIgnoreCase(null)))
{
jTextArea3.setText("");
}
String fullText = jTextArea2.getText();
fullText = fullText.replaceAll("\n", " ");
String[] tabM = fullText.split(" ");
for (int j = 0; j < tabM.length; j++)
{
if (tabM[j].equalsIgnoreCase(jTextArea2.getSelectedText()) == true)
{
jTextArea3.append(" Context : " + tabM[j - 3] + " " + tabM[j - 2] + " " + tabM[j - 1] + " " + tabM[j] + " " + tabM[j + 1] + " " + tabM[j + 2] + " " + tabM[j + 3] + "\n");
}
}
}
}
Remarque : ajouter ligne par ligne les données au jTextArea est source de lenteur. Si tu as 100 lignes, la fenêtre va être rafraîchit 100 fois. Il vaut mieux construire ton String au fur et à mesure, et ne rafraîchir la fenêtre qu'une fois à la fin...
Hssy23
Messages postés7Date d'inscriptionjeudi 16 octobre 2014StatutMembreDernière intervention18 août 2015 6 nov. 2014 à 18:36
Salut KX,
j'ai fait ce que vous m'avez proposé, mais l'exécution reste toujours lente.
Concernant le ProgressBar, parfois il fonctionne correctement parfois non, vu que le temps d'exécution est variable.
Merci pour votre conseil et votre aide.
KX
Messages postés16734Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention24 avril 2024127 6 nov. 2014 à 19:37
Pour avoir une progress bar "intelligente" tu devrais compter la taille du fichier au départ puis au fur et à mesure que tu lis tes lignes compter la taille déjà traitée.
Cependant tout traitement que tu feras en plus (pour la mise à jour de la barre) sera du temps perdu sur l'exécution du programme. Il vaut parfois mieux privilégier la vitesse à la présentation.
6 nov. 2014 à 18:36
j'ai fait ce que vous m'avez proposé, mais l'exécution reste toujours lente.
Concernant le ProgressBar, parfois il fonctionne correctement parfois non, vu que le temps d'exécution est variable.
Merci pour votre conseil et votre aide.
6 nov. 2014 à 19:37
Cependant tout traitement que tu feras en plus (pour la mise à jour de la barre) sera du temps perdu sur l'exécution du programme. Il vaut parfois mieux privilégier la vitesse à la présentation.