2009-05-04 19 views
1

Ich habe einen Ordner namens Etc, der ein Bild hat, das ich in einer anderen Datei im selben Ordner, Beispiel.java verwenden möchte. Also habe ich Etc \ image.png und Etc \ Example.java. Ich habe versucht, "Etc/image.png" als Bildpfad zu verwenden, aber das hat nicht funktioniert. Wie soll ich das machen?Problem mit Pfaden in einem Java-Jar

Angenommen, die Dateien waren in verschiedenen Paketen, wie würde ich es tun?

Meine wichtigsten .java-Klassen sind in einem Paket namens Main, für die Aufzeichnung.

EDIT:

I verwendet, das:.

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

Antwort

2

Sie können Class.getResource() verwenden, die den Klassenlader verwendet, um eine URL zu der Ressource zu erhalten. Zum Beispiel:

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 
    } 

} 

Der wichtigste Teil ist Example.class.getResource("image.png") - das Bild Pfad zur angegebenen Klasse relativ angegeben wird; In diesem Fall befindet es sich im selben Verzeichnis wie die Klassendatei. Sie könnten diese Zeile auch in jeder anderen Klasse verwenden und den Verweis auf Example.class intakt lassen.

0

Erste Dinge zuerst.

Ist Etc ein Paket? Mit anderen Worten haben Sie oben in Ihrer Beispieldatei ein

Paket Etc;

???

Normalerweise sind Paketnamen Kleinbuchstaben, weshalb ich frage.

Zweitens, obwohl Sie relative Pfade verwenden können, um auf Ressourcen zuzugreifen, würde ich empfehlen, immer absolute Pfade zu verwenden.

So

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

wenn Etc ist ein Paket, sonst

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

wenn es nicht ist.

0

Damit das funktioniert, müssen Sie das Verzeichnis haben, in dem sich Etc im Klassenpfad befindet. Wenn es im Glas ist, erinnere ich mich nicht, wenn. Funktioniert als Klassenpfad, wenn nicht, fügen Sie Etc zum Klassenpfad hinzu und referenzieren das Bild ohne den Klassenpfad oder setzen Sie Etc in ein Unterverzeichnis. und lege dieses Unterverzeichnis in den Klassenpfad.