[Jar][ClassLoader] reference classe statique ou d'instance [Résolu]

cs_loloof64 350 Messages postés vendredi 1 septembre 2006Date d'inscription 6 novembre 2012 Dernière intervention - 1 févr. 2010 à 22:20 - Dernière réponse : cs_loloof64 350 Messages postés vendredi 1 septembre 2006Date d'inscription 6 novembre 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 1 févr. 2010 à 22:43
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 févr. 2010 à 07:47
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 2 févr. 2010 à 11:32
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
cs_loloof64 350 Messages postés vendredi 1 septembre 2006Date d'inscription 6 novembre 2012 Dernière intervention - 1 févr. 2010 à 23:46
0
Merci
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.
Commenter la réponse de cs_loloof64
cs_loloof64 350 Messages postés vendredi 1 septembre 2006Date d'inscription 6 novembre 2012 Dernière intervention - 2 févr. 2010 à 11:22
0
Merci
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
Commenter la réponse de cs_loloof64
cs_loloof64 350 Messages postés vendredi 1 septembre 2006Date d'inscription 6 novembre 2012 Dernière intervention - 2 févr. 2010 à 16:09
0
Merci
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
Commenter la réponse de cs_loloof64

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.