Je 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
# pas tout compris
Posté par TImaniac (site web personnel) . Évalué à 2.
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 . Évalué à 1.
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 (site web personnel) . Évalué à 2.
[^] # Re: pas tout compris
Posté par Pinaraf . Évalué à 1.
Mais je peux pas l'enlever ou le changer en public : il gueule...
[^] # Re: pas tout compris
Posté par TImaniac (site web personnel) . Évalué à 2.
[^] # Re: pas tout compris
Posté par Pinaraf . Évalué à 1.
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 (site web personnel) . Évalué à 2.
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 . Évalué à 1.
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 . Évalué à 1.
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 . Évalué à 1.
# Youpi !!! Ça marche !
Posté par Pinaraf . Évalué à 2.
Ç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 . Évalué à 1.
http://pinaraf.robertlan.eu.org/GlassyTaskbar.java(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.