Retourner aux forums || Retourner au forum Programmation.java
Programmation.java : Problèmes de portée (enfin je crois)
Posté par Pinaraf (Jabber id, ) le 13 novembre 2004Je me suis mis tout à l'heure à Java, afin de coder un peu pour Looking Glass.
Et maintenant, je tombe sur un truc que je comprend pas.
En gros, j'ai utilisé un parseur de fichiers XML pour charger un fichier de conf. Maintenant j'aimerais en utiliser les résultats.
Voici le "vieux" code :
themes.addChild(
new BackgroundIcon("resources/images/icon/hoover.png",
width * 0.05f) {
protected Background initBackground() {
return new PanoImageBackground(
"resources/images/background/Stanford-", ".png", 2);
}
});J'aimerais charger les éléments depuis mon fichier de conf. Pour ça, j'utilise un objet NamedNodeMap attributes de cette façon : attributes.getNamedItem("type").getNodeValue()
Le problème : à cause du protected, j'ai pas accès à mon objet attributes, déclaré plus haut par un simple NamedNodeMap attributes;
Comment résoudre ce problème ?
Merci d'avance
> Lire le message (12 commentaires, moyenne: 1,4).
pas tout compris
Je comprends pas bien où se situe exactement ton problème, quelle est la relation entre le bout de code que tu as donné et ton objet NamedNodeMap ?
De façon général quand on ne peut accéder à quelque chose de protected, on dérive de la classe qui le contient pour y accéder ou le rendre public. Je sais pas si celà répond à ta question :)
-
[^]Re: pas tout compris
Posté par Pinaraf (Jabber id, ) le 13/11/2004 à 21:40. (lien). Évalué à 1.En gros, voici la structure du programme :
try {
NamedNodeMap attributes;
pleind'autreschoses
bout de code que j'ai donné en remplaçant les chaînes en brut par des attributes.getNamedItem("xxx").getNodeValue()
} catch ..........-
[^]Re: pas tout compris
Posté par TImaniac (page perso, ) le 13/11/2004 à 22:02. (lien). Évalué à 2.c'est le protected devant ta déclaration de méthode qui te gène ?
-
[^]Re: pas tout compris
Posté par Pinaraf (Jabber id, ) le 13/11/2004 à 22:19. (lien). Évalué à 1.Ben apparemment, c'est lui qui fais gueuler le compilateur : javac me dit qu'attributes doit être final, mais bon, final => constant => pas bon...
Mais je peux pas l'enlever ou le changer en public : il gueule...-
[^]Re: pas tout compris
Posté par TImaniac (page perso, ) le 13/11/2004 à 22:21. (lien). Évalué à 2.Franchement file ton morceau de code entier parcque là c'est pas vraiment clair :)
-
[^]Re: pas tout compris
Posté par Pinaraf (Jabber id, ) le 13/11/2004 à 22:28. (lien). Évalué à 1.Moi, pas clair ?
Mais non :p
Message d'erreur :
local variable attributes is accessed from within inner class; needs to be declared final
Le code est là : http://pinaraf.robertlan.eu.org/Taskbar.java(...)
Merci d'avance...-
[^]Re: pas tout compris
Posté par TImaniac (page perso, ) le 14/11/2004 à 10:23. (lien). Évalué à 2.Je comprends mieux :)
Déjà je mettrais pas la déclaration de attributes dans le try{}, faut mieux mettre le strict minimum dans le try{}.
Ensuite effectivement il y a un problème à cause de ta classe interne qui ne peut pas accéder à une variable locale comme ça. Elle peut par contre accéder à un champ de ta classe : déclare ta variable attributes à l'extérieur de la méthode en tant que champ de la classe (sous appThumbnails par exemple).
Le protected n'a strictement rien à voir avec la choucroute en fait : c'est pour limiter l'accès à la méthode protégée aux classes du packages et aux classes dérivées (bien que dériver d'une classe anonyme ça va être balaise).
(PS : si tu veux mon avis, bien qu'étant un raccourci d'écriture, les classe internes anonymes gène franchement la lisibilité)-
[^]Re: pas tout compris
Posté par Pinaraf (Jabber id, ) le 14/11/2004 à 12:31. (lien). Évalué à 1.(PS : si tu veux mon avis, bien qu'étant un raccourci d'écriture, les classe internes anonymes gène franchement la lisibilité)
Tu trouves aussi ?
Le pb c'est que le code n'est pas de moi, sinon sois sûr qu'il y aurait pas ça !
J'essaye ce que tu m'as indiqué (merci !) et je te tiens au courant.-
[^]Re: pas tout compris
Posté par Pinaraf (Jabber id, ) le 14/11/2004 à 13:08. (lien). Évalué à 1.Je viens d'envoyer le source modifié à l'adresse http://pinaraf.robertlan.eu.org/GTaskbar.java(...)
Malheureusement, à l'exécution, je me prends un :
java.lang.NullPointerException
at org.jdesktop.lg3d.scenemanager.utils.taskbar.GlassyTaskbar$1.initBackground(GlassyTaskbar.java:147)
at org.jdesktop.lg3d.scenemanager.utils.taskbar.GlassyTaskbar$BackgroundIcon.select(GlassyTaskbar.java:257)
at org.jdesktop.lg3d.scenemanager.utils.taskbar.GlassyTaskbar$BackgroundIcon$1.performAction(GlassyTaskbar.java:249)
at org.jdesktop.lg3d.utils.eventadapter.MouseClickedEventAdapter.processLgEvent(MouseClickedEventAdapter.java:434)
at org.jdesktop.lg3d.displayserver.event.EventProcessor.processEventList(EventProcessor.java:225)
at org.jdesktop.lg3d.displayserver.event.EventProcessor.run(EventProcessor.java:199)
-
-
-
-
-
[^]Re: pas tout compris
Posté par wismerhill (page perso, ) le 14/11/2004 à 11:29. (lien). Évalué à 1.final est presque équivalent à constant c'est vrai, mais uniquement pour la variable. En l'occurence la variable est une référence sur une instance, et c'est cette référence qui est constante, pas l'objet. Donc en mettant final elle ne pourra pointer que vers cet objet, mais l'objet lui peut toujours être modifié.
-
-
-
Youpi !!! Ça marche !
Merci à vous de vous être penchés sur le problème :)
Ça marche maintenant. Pour cela, j'ai créé une classe PanoramicBackground dont le constructeur prend en argument un NamedNodeMap... Ensuite, j'en stocke dans un vector et ça roule :)
J'enverrai le code plus tard pour les intéréssés (dès que j'aurai fini la gestion des fonds d'écran Layered)
-
[^]Re: Youpi !!! Ça marche !
Posté par Pinaraf (Jabber id, ) le 14/11/2004 à 15:48. (lien). Évalué à 1.Le voilà, j'ai eu un pb assez chiant à résoudre (en bref : code pas propre)
http://pinaraf.robertlan.eu.org/GlassyTaskbar.java(...)
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.java



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.