[Jar][ClassLoader] reference classe statique ou d'instance

Résolu
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 1 févr. 2010 à 22:20
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 2 févr. 2010 à 16:09
Salut à tous

J'ai lu le tutoriel "INTÉGRER DES IMAGES DANS UN JAR AVEC ECLIPSE" d'Icarius44, même si je connaissais un petit peu les manipulations.
Ce qui m'a vraiment plu, c'est l'explication sur l'utilisation obligatoire de la formule
new ImageIcon(this.getClass().getRessource(cheminFichier))
au lieu du simple
new ImageIcon(cheminFichier)
pour obtenir l'image contenu DANS UN JAR.

Par contre, est-ce que si je passe une reference statique de la classe au lieu de this, par exemple
new ImageIcon(MaClasse.class.getRessource(cheminFichier))
fonctionnera aussi bien ? Et pourquoi ?

(Le tutoriel date de 2008, j'ai donc préféré poser la question dans le forum)

Merci d'avance

Loloof64

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 févr. 2010 à 22:43
Salut,

C'est pareil : que tu passe par une instance de classe ou une référence statique, c'est l'instance d'une Class qui fournit la méthode getRessource
______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 févr. 2010 à 07:47
Salut,

Un objet de type Class permet l'introspection sur n'importe quelle référence statique ou une instance de classe. C'est java qui le propose par défaut.

Ainsi, n'importe quelle classe java hérite de la classe "Object" ce qui lui ajoute tout un tas de fonctions et méthodes tout plus utiles les unes que les autres, voir la javadoc.

C'est la jvm de java qui charge les classes d'un projet au lancement de celui-ci, et les répertorie dans sa table d'index. C'est ainsi qu'on peut faire une introspection des classes disponibles sans même les avoir instanciées au préalable.
______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 févr. 2010 à 11:32
Salut,

Tu as tord, car la javadoc est la documentation officielle et elle est vraiment complète et bien fichue !

Je n'ai pas de doc sous la main, mais un petit tour sur google, et tu devrais trouver ton bonheur.

Par exemple :
http://www.developer.com/java/other/article.php/10936_2248831_1/Java-Class-Loading-The-Basics.htm

Mais là tu rentre dans un domaine assez complexe : tu n'as pas besoin de connaître tout cà pour faire un programme. Par contre, si tu es curieux et que tu veux comprendre comment ca marche, c'est un domaine très intéressant.
______________________________________
DarK Sidious
3
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
1 févr. 2010 à 23:46
Salut DarkSidious

Je te remercie beaucoup pour ta réponse.
Je vais t'avouer très honnêtement que ca me parait bizarre que dans les deux cas on obtienne une instance (en effet, la simple notation générique du retour de la méthode getClass dans la javadoc suffit à me troubler => Sans trop vouloir dévier, les génériques je les utilise mécaniquement avec les Collections, mais je ne les programme pas encore ... d'où mon trouble avec cette écriture très formelle de Sun).

De même que le ClassePersonelle.class me trouble quelque part, même si j'admets sans réfléchir qu'il s'agit d'une référence de Class<ClassPersonelle> statique (c'est bien cela, d'ailleurs ?)

En tous cas, ma 1ere question est résolue , et ce que j'en comprenne ou non les tenants et les aboutissants.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
2 févr. 2010 à 11:22
Salut DarkSidiuos,
merci de m'avoir éclairé sur ce point.

Pour ma propre culture, aurais-tu un lien (si possible autre que la doc officielle de Sun, que je ne comprends que rarement du 1er coup) d'une simple explication sur la manière dont la java virtual machine repertorie les classes utilisées dans sa table d'index ?
(En fait, ce qui m'intéresse ce n'est pas le b.a-b.a mais c'est la mnière dont elle fait le lien entre les methodes d'instances ou statiques appelées - idem d'ailleurs pour les attributs- et les classes appartenant => J'ai mon idée là-dessus, elle utiliserait sa porpre api de retrospection ...)

Après je l'admet, ca commence à devenir complexe mais interessant pour que j'y attribue de l'importance
0
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
2 févr. 2010 à 16:09
Merci
Je vais lire ce document avec attention.

Par contre, je n'ai pas voulu emettre un avis défavorable sur la javadoc, au contraire, elle me semble indispensable et plus intuitive que des documentations MSDN par exemple. Mais je suis juste un peu coincé avec la programmation générique, domaine dans lequel il faudra vraiment que je crée mes propres classes, avec wildcard et joker tant qu'à progresser

Le problème que j'ai eu, et ce pourquoi les détails de la rélection m'interessent tant, c'est que j'ai écrit un code MIDLET MIDP2 sur la plateforme Eclispe Galileo Pulsar, et ce projet intègre des images gif. Malheureusement, je n'arrivais pas à charger les images en passant une classe par référence statique "au ClassLoader", mais avec une variable d'instance ca passait sans problème. Peut être que mon code était légèrement érroné quand j'ai passé la référence statique (Je l'ai contourné grâce au PATTERN SINGLETON appliqué sur cette même classe). Mais je te fais confiance, il y a bien plus utile que à apprendre que les détails de chargement des classes par la jvm en priorité

Merci
0
Rejoignez-nous