Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1322 connectés 

  FORUM HardWare.fr
  Programmation

  [Java]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java]

n°24909
246tNt
Resistance is futile
Posté le 15-04-2001 à 22:14:10  profilanswer
 

Voila, j'ai une application ( pas une applet )
Elle charge des images. ( style getImage("test.gif" ) )
 
Ca se passe tres bien si j'execute le .class dans le repertoire ou il se trouve (et ou se trouve la gif)
Par contre, si je l'execute depuis un autre repertoire, ca ne vas pas -> Comment trouver le path dans lequel se trouve la class ?
 
Et si j'en fait un jar ca ne marche pas non plus -> Comment faire pour qu'il aille cherche l'image dans le jar ?
 
Merci

mood
Publicité
Posté le 15-04-2001 à 22:14:10  profilanswer
 

n°25015
BifaceMcLe​OD
The HighGlandeur
Posté le 16-04-2001 à 22:34:31  profilanswer
 

Tout simplement parce que le package ou elle se trouve fait partie de son nom. Et il y a concordance parfaite entre packages Java et répertoires sur le disque.
 
Donc : si l'image est dans un autre répertoire, pour Java, elle est dans un autre package. En d'autre termes, il faut que tu donnes, avec le nom de l'image, son chemin par rapport à la "racine" de la hiérachie de tes classes.

n°25024
spy2k
Posté le 16-04-2001 à 23:12:59  profilanswer
 

Je m'excuse 246tNt de m'incruster mais j'ai exactement le meme probleme que toi au niveau du chargement des images qui ne s'effectue pas alors qu'elles sont bien dans mon jar. Et mon appli ne les lit pas paske si je bouge mon jar elles ne s'affichent plus prouvant donc qu'ils les lit pas dans mon jar mais sur mon dur.
 
Je fais bien pourtant un :
 
jar cmf META-INF\MANIFEST.MF MONAPPLI.jar MESCLASSES\*.class icons\*.gif  
 
avec icons qui contient toutes mes images.
 
Je comprends pas comment une image(son nom en fait) peut faire partie d'un package aussi, puisque c'est juste un parametre dans un fonction.
 
BifaceMcLeOD, tu pourrais juste nous expliquer en prenant un exemple ca serait sympa.
 
Merci d'avance.

n°25034
BifaceMcLe​OD
The HighGlandeur
Posté le 17-04-2001 à 00:27:14  profilanswer
 

Dans Java, une image ou un fichier de propriétés (.properties) sont gérés exactement de la même façon qu'une classe. Ce sont d'abord des fichiers. Et tous sont chargés en mémoire exactement de la même façon.
 
Après, ce qui est différent, c'est ce qu'on fait du contenu du fichier qui a été copié en mémoire.
 
Quand tu invoques une classe de n'importe où (sauf de son package), il faut que tu spécifies le package de cette classe. Cela va permettre à Java de trouver le fichier .class sur le disque.
Pour les images, c'est pareil. Comme veux-tu que Java invente que les images sont à chercher dans "../icons" ?
 
PS: Inutile de préciser que tu écris une application et non une applet, pour Java, il n'y a quasiment aucune différence ; en fait, seul le point d'entrée, c'est-à-dire la façon de démarrer, diffère. D'ailleurs, tu peux très facilement écrire une application qui se comporte comme une applet.

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

n°25303
246tNt
Resistance is futile
Posté le 17-04-2001 à 16:58:45  profilanswer
 

J'ai trouvé la solution, mes path était correct.
Voila mon code :
 
 String filename = new String("NP/toolbox/panel.jpg" );
 Toolkit tk = this.getToolkit();
 this.m_rawImg = tk.getImage( this.getClass().getClassLoader().getResource(filename) );

n°25305
petoulachi
A fortiori, brigadier chef
Posté le 17-04-2001 à 17:06:37  profilanswer
 

je rajoute juste pour ceux qui ont des pb à récuperer des images contenues dans un JAR qu'il faut faire attention a la casse (majuscule/minuscule) car,si dans win il  s'en fout, il n'en est pas de meme dans un .jar !

n°25343
BifaceMcLe​OD
The HighGlandeur
Posté le 17-04-2001 à 20:22:18  profilanswer
 

246tNt a écrit a écrit :

J'ai trouvé la solution, mes path était correct.
Voila mon code :
 
 String filename = new String("NP/toolbox/panel.jpg" );
 Toolkit tk = this.getToolkit();
 this.m_rawImg = tk.getImage( this.getClass().getClassLoader().getResource(filename) );




C'est bizarre que tu aies besoin de faire explicitement appel au loader de classe...
Il me semblait que le code suivant suffisait...
 
    String relativeFilename = "NP/toolbox/panel.jpg";
    this.m_rawImg = this.getToolkit().getImage(relativeFilename);

n°25356
246tNt
Resistance is futile
Posté le 17-04-2001 à 21:33:02  profilanswer
 

J'ai essayé ca d'abord mais ca ne marche pas si il est dans un jar ou si on execute la classe a partir d'un autre emplacemement (style  java d:\Projet\Test  a partir du c: )

n°25375
BifaceMcLe​OD
The HighGlandeur
Posté le 17-04-2001 à 22:59:57  profilanswer
 

Depuis un jar, ça m'étonne. Le code que j'utilise marche dans tous les cas (jar ou hiérarchie de classes, applet ou appli), ce que j'ai posté ne fait qu'élimier le cas applet.
 
A mon avis, tu as un problème de CLASSPATH et/ou de fabrication de ton JAR.

n°25411
246tNt
Resistance is futile
Posté le 18-04-2001 à 02:17:56  profilanswer
 

Oui peut etre de CLASSPATH mais bon, avec le ClassLoader ca marche dans le java de sun ( ca fait planter le JView de microsoft mais bon ... )
 
Je regarderait ca plus tard si j'ai le temps ...

mood
Publicité
Posté le 18-04-2001 à 02:17:56  profilanswer
 

n°25412
246tNt
Resistance is futile
Posté le 18-04-2001 à 02:20:30  profilanswer
 

comment tu fait ton jar toi ?

n°25413
BifaceMcLe​OD
The HighGlandeur
Posté le 18-04-2001 à 03:36:28  profilanswer
 

Ben avec "jar"...  :p  
 
Dans ton cas, ça marcherait sans doute si une fois le jar construit, ton image panel.jpg avait effectivement pour chemin "NP/toolbox/panel.jpg" (ouvre le jar avec WinZip pour pouvoir voir ça).
 
Pour info, ma fonction de chargement d'image complète est la suivante (on suppose que la classe courante étend java.applet.Applet, ce qui peut toujours être le cas, même pour une application) :
 
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
 
public Image loadImage(String relativeFileName) {
    try {
        URL  codeBase = this.getCodeBase();
 
        return this.getImage(codeBase, relativeFileName);
    }
    catch (NullPointerException e) {
        // Raised if the applet is run as an application
        //  => there is no URL code base
        return Toolkit.getDefaultToolkit().getImage(relativeFileName);
    }
}
 
Et garanti, elle marche bien...

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

n°25425
246tNt
Resistance is futile
Posté le 18-04-2001 à 08:43:20  profilanswer
 

Ben ouai mais je peut pas etendre applet vu que j'etend déja Panel ...
 
Parce que dans mon jar, le path relatif est bon...
( je le fait avec visual J++, activer l'empaquetage )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Java]

 

Sujets relatifs
JAVA vs C vs C++[JAVA] - Comment tracer des lignes, rectangles sur une PlanarImage ??
[JAVA] - Problème de rafraîchissement d'écran !!![Java] Et oui encore un probleme ...
[Java] Parametres pour Servletsjava aide API
[JAVA] Comment récupèrer l'encoding d'un document XML ???Transfert de fichiers en Java
[java] PB d'envoi de mail (ca passe par un proxy)[Java, html] Deactiver les touches de fonction ie
Plus de sujets relatifs à : [Java]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR