JprogressBar et Threads

pianedd777 Messages postés 4 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 21 février 2006 - 21 févr. 2006 à 12:24
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 22 févr. 2006 à 00:52
Décidément, ces JprogressBar et Threads !! En fait, j'essaie de faire évoluer une Jprogressbar, lorsque mon programme va récupérer des emails.

J'ai créé une classe Thread pour faire évoluer ma JprogressBar :

-----------------------------------------------------------------------------
package threadsPackage;


import main.MainFrameCEE;
import java.util.Vector;
import javax.mail.Message;


public class ThProgressEmails extends Thread {
public ThProgressEmails() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}



MainFrameCEE mFrame;
int max;
Vector VcurrentRow;
Vector Vdonnees;
Message messages[];


public ThProgressEmails (MainFrameCEE fen, Message msg[]) {
super();
mFrame = fen;
messages = msg;
mFrame.progressEmails.setMinimum(0);
mFrame.progressEmails.setMaximum(messages.length);
mFrame.progressEmails.setStringPainted(true);
}



public void run()
{


try
{
max = messages.length;

for (int i=0; i <= max; i++)
{
mFrame.progressEmails.setValue(i);
mFrame.progressEmails.repaint();
mFrame.repaint();
this.sleep(100);
}


}catch (Exception ex) {
System.err.println("Error : " + ex.getMessage());
ex.printStackTrace();
}
}


private void jbInit() throws Exception {
}
}
---------------------------------------------

Et voilà le code ou je récupère les mails (et que j'essaie de mettre à jour ma progressBar à l'aide de ma classe Thread) :

ThProgressEmails th = new ThProgressEmails (this,message);
th.start();
for (int i = 0; i < message.length; i ++)
{

StatutEmails = i;
VcurrentRow = new Vector();
VcurrentRow.addElement(message[i].getFrom()[0]);
VcurrentRow.addElement(message[i].getSubject());
VcurrentRow.addElement("");

Vdonnees.addElement(VcurrentRow);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException ex4) {
}



}

---------------------------------------

J'essaie par tous les moyens de voir l'évolution de ma JProgressBar, mais sans succès !!! je peux voir que le programme va dans le thread , au fur et à mesure qu'il récupère les emails... Mais il ne dessine pas l'évolution et de plus il finit le Thread avant qu'il ait récupéré les emails (je n'arrive pas non plus à synchroniser !) ...

ffffieu
Si quelqu'un pourrait m'aider : Merci d'avance !!!!

1 réponse

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
22 févr. 2006 à 00:52
Salut,



voici une progressbar avec un thread inspire toi de ce code (dsl pour le manque de commentaire)



import java.awt.BorderLayout;

import java.awt.Color;



import javax.swing.BorderFactory;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JProgressBar;

import javax.swing.JLabel;

import javax.swing.JPanel;


public class JProgress extends JDialog {



private static final long serialVersionUID = -1953430325321139627L;



private JPanelInsets jContentPane = null;



private JProgressBar progress = null;



private Move move = null;



private JLabel jLabel = null;



public JProgress(JFrame owner) {

super(owner, "Progression ...", false);

initialize();

setLocationRelativeTo(owner);

}



public void setVisible(boolean b) {

if (b) {

if (move == null) {

move = new Move();

move.start();

}

} else {

if (move != null) {

move.end();

move = null;

}

}

super.setVisible(b);

}



public void dispose() {

super.dispose();

if (move != null) {

move.end();

move = null;

}

}



private void initialize() {

this.setSize(300, 35);

this.setContentPane(getJContentPane());

this.setUndecorated(true);

}



private JPanel getJContentPane() {

if (jContentPane == null) {

jLabel = new JLabel();

jLabel.setText("Progression en cours ...");

jContentPane = new JPanel();

jContentPane.setBorder(BorderFactory.createEtchedBorder(Color.GRAY,

Color.DARK_GRAY));

jContentPane.setLayout(new BorderLayout());

jContentPane.add(getProgress(), java.awt.BorderLayout.CENTER);

jContentPane.add(jLabel, java.awt.BorderLayout.NORTH);

}

return jContentPane;

}



private JProgressBar getProgress() {

if (progress == null) {

progress = new JProgressBar();

progress.setMinimum(0);

progress.setMaximum(100);

progress.setValue(0);

}

return progress;

}



private class Move extends Thread {

private boolean end = false;



public void run() {

try {

while (!end) {

sleep(10);


if (getProgress().getValue() <
getProgress().getMaximum())



getProgress().setValue(getProgress().getValue() + 1);

else {



getProgress().setValue(0);

}

repaint();

}

} catch (InterruptedException e) {

end();

}

}

public void end() {

this.end = true;

}

}

}










WORA
0
Rejoignez-nous