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 (?)
Le bouton qui appelle la tache
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } } }); }
Et enfin la tache elle meme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private void startButtonActionPerformed(java.awt.event.ActionEvent evt) { this.startEncrypt().execute; }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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() { } }
Quelque chose doit surement m'echapper
Toute aide sera la bienvenue!
Merci d'avance!
Partager