2009-05-04 6 views
1

J'ai un dossier appelé Etc qui a une image que je veux utiliser dans un autre fichier dans le même dossier, Example.java. J'ai donc Etc \ image.png et Etc \ Example.java. J'ai essayé d'utiliser "Etc/image.png" comme chemin de l'image, mais cela n'a pas fonctionné. Comment dois-je m'y prendre?Problème avec les chemins dans un java java

En outre, supposons que les fichiers se trouvaient dans des packages différents, comment le ferais-je?

Mes classes .java principales sont dans un paquet appelé Main, pour l'enregistrement.

EDIT:

je ceci:.

ClassLoader.getSystemClassLoader() getResource ("Etc \ image.png");

Répondre

2

Vous pouvez utiliser Class.getResource(), qui utilise le chargeur de classe pour obtenir une URL vers la ressource. Par exemple:

import java.net.URL; 
import javax.swing.ImageIcon; 

public class Example { 

    public ImageIcon getImage() { 
     URL url = Example.class.getResource("image.png"); 
     if(url != null) { 
      return new ImageIcon(url); 
     } 
     return null; // TODO: Better error handling 
    } 

} 

L'important est Example.class.getResource("image.png") - le chemin d'image est spécifiée par rapport à la classe nommée; dans ce cas, il se trouve dans le même répertoire que le fichier de classe. Vous pouvez également utiliser cette ligne dans toute autre classe, en laissant la référence à Example.class intacte.

0

Les premières choses d'abord.

Est-ce que Etc est un paquet? En d'autres termes, en haut de votre fichier d'exemple, avez-vous un paquet

Etc;

???

Habituellement, les noms de paquets sont en minuscules, c'est pourquoi je demande. Deuxièmement, bien que vous puissiez utiliser des chemins relatifs pour accéder aux ressources, je recommanderais toujours d'utiliser des chemins absolus.

Alors

URL url = Example.class.getResource ("/ etc/image.png");

si Etc est un paquet, sinon

url = URL Example.class.getResource ("/ image.png");

si ce n'est pas le cas.

0

Pour que cela fonctionne, vous devez avoir le répertoire où Etc est dans le classpath. Si c'est dans le pot, je ne me souviens pas si. fonctionne comme un chemin de classe, sinon, ajoutez Etc au classpath, et référencez l'image sans le classpath, ou placez Etc dans un sous-répertoire. et placez ce sous-répertoire dans le chemin de la classe.