Bonjour,
J'ai une classe A qui contient une methode qui a une classe anonyme. Je voudrais savoir si je pouvais accéder aux variables d'instance de la classe A dans ma classe anonyme.
Merci
A+
Bonjour,
J'ai une classe A qui contient une methode qui a une classe anonyme. Je voudrais savoir si je pouvais accéder aux variables d'instance de la classe A dans ma classe anonyme.
Merci
A+
Si je t'ai bien compris, oui tu peut y accéder, à la condition qu'aucune variable de la classe anonyme n'aie le même nom que la variable de la classe A que tu veut récupérer. Par contre tu ne pourras pas employer le this, puisque le this te renverra une référence vers la classe interne.
Ok, ce code est donc correct alors :
Et si je veux acceder à ma classe A dans la classe interne c'est :
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 public class A { private ArrayList<Thumbnail> thumbnailList; private void createAndAddThumbnail(final File [] files) { SwingWorker sw = new SwingWorker() { protected Object doInBackground() throws Exception { for(int i=0;i<files.length;i++) { Thumbnail thumbnail = new Thumbnail(files[i]); jPanel1.add(thumbnail); thumbnailList.add(thumbnail); } return ""; } }; sw.execute(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part A.this
Ce code est incorrect du point de vue de la gestion des threads. La ligne suivante :
Devrait en fait être :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 jPanel1.add(thumbnail);
Il ne faut pas manipuler les objets Swing depuis un thread qui n'est pas l'EDT. Le SwingWorker invoque doInBackground() justement dans un autre thread. Il faut soit faire ce que je viens d'écrire ou ajouter tous les élements dans le JPanel dans le done() du SwingWorker qui est invoquée dans l'EDT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SwingUtilities.invokeLater(new Runnable() { public void run() { jPanel1.add(thumbnail); } });
Et puisque tu utilises Java 1.5 tu peux remplacer ta boucle par for (File thumbFile : files) et files[i] par thumbFile.
Ok merci.
Et est ce que le fait d'appelé un repaint dans le thread du SwingWorker est correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SwingWorker sw = new SwingWorker() { protected Object doInBackground() throws Exception { for(Thumbnail thumbnail : thumbnailList) { BufferedImage image = createThumbnail(thumbnail.getFile()); thumbnail.setImage(image); jPanel1.repaint(); } return ""; } };
Ok. Merci pour ces précisions.
A+
PS : Félicitation pour la démo des JavaOne, c'est super jolie
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager