TaskMonitor et JProgressBar
Bonjour,
Apres plusieurs heures de recherche sur google je viens tenter ma chance sur ce forum.
Je suis en train de developper un programme Java chargé de crypter/decrypter des donnée selon l'algorithme du RSA. J'ai créé une Desktop Application sous Netbeans pour developper cette application.
Le cryptage/decryptage des information peut prendre beaucoup de temps en fonction du fichier traité, j'utilise donc une Action Task qui réalise ce processus dans un thread parralele au sein de doInBackground()
Jusque la tout se passe a merveille, la tache se lance bien, le thread aussi et le programme fait ce qu'il a à faire. Mon problème est que j'aimerai pouvoir afficher l'avancement du processus donc la progress bar mais je ne parvient pas a comprendre pourquoi il ne se passe rien au niveau de cette derniere :(
Voila le code:
Généré par NetBeans, normalement pas besoin d'y toucher (?)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
public class RSAProject extends FrameView {
public RSAProject(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(true);
// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
System.out.println(propertyName);
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
} |
Le bouton qui appelle la tache
Code:
1 2 3 4
|
private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
this.startEncrypt().execute;
} |
Et enfin la tache elle meme
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
@Action
public Task startEncrypt() {
return new StartEncryptTask(getApplication());
}
private class StartEncryptTask extends Task<Void, Void> {
StartEncryptTask(org.jdesktop.application.Application app) {
super(app);
}
@Override
protected Void doInBackground() {
try {
//code specifique au cryptage
}
catch(java.lang.Exception e) {
//code specifique au execptions
}
return null;
}
protected void succeeded() {
}
} |
Voila, je ne comprend pas d'ou ca peut venir, le TaskMonitor est bien "sur ecoute" et devrait reagir lors de l'apparition d'une tache.
Quelque chose doit surement m'echapper :?
Toute aide sera la bienvenue! :D
Merci d'avance!