Also wie das Betreff schon sagt, moechte ich aus dem ausfuehrendem .jar File, Dateien laden.
z.B. ein Icon oder eben Musik.
Hat irgendwer eine Idee, wie das funktionieren koennte?
Fuxi Gast |
Fuxi Gast |
Also wie das Betreff schon sagt, moechte ich aus dem ausfuehrendem .jar File, Dateien laden.
z.B. ein Icon oder eben Musik.
Hat irgendwer eine Idee, wie das funktionieren koennte?
Probiers mal mit
URL myUrl = this.getClass().getResource("/pathto/myfile.ext");
und dann halt irgendwas zum Laden nehmen, das mit ner URL umgehen kann.
Danke, hab es ausprobiert. Ich kann mir Icons laden, und sie verwenden, mit Musik habe ich es noch nicht probiert, ist aber genau die selbe prozedur, also wird es da kein Problem geben.
Wobei mich noch eins Interessieren wuerde:
Wenn ich es wie oben angefuehr machen wuerde, dann muesste jedes Objekt es selbst neu laden, was aber wenn ich die Ressource statisch 1 mal Laden will, und dann alle drauf zu greifen, ist meiner Meinung nach etwas programmfreundlicher.
Mach dir doch ein Icon-Objekt (z.B.) und das dann irgendwie global verfuegbar. Zum Bleistift ueber ne statische Wrapper-Klasse etc. Du musst ja nicht jedesmal wieder mit der URL usw. hantieren. Oder verstehe ich da jetzt was falsch?
Ich bin nicht sicher ob du es falsch verstanden hast oder nicht .
Ich habe eine Art "statische Bibliothek", also in der Bibliothek speicher ich Sachen, die mehrere Klassen benoetigen.
z.B. bei Verbindungen die IPs/Ports, oder eben Icons.
Ich habe es so geloest dass ich der Bibliothek einen Konstruktor gab, der eben nur eines macht:
meinIcon = new ImageIcon(Toolkit.getDefaultToolKit().createImage(getClass().getResource("/pathto/myfile.ext"));
Wobei "meinIcon" ein statisches ImageIcon ist.Ja, an sowas in der Art dachte ich. Allerdings haette ich das komplett statisch geloest:
public class MediaLibrary {
private static final ImageIcon myIcon = new ImageIcon(
Tooolkit.getDefaultToolKit().createImage(
getClass().getResource( "/pathto/myfile.ext" ) );
public static ImageIcon getIcon() {
return myIcon;
}
}
und dann kann man spaeter drauf zugreifen, ohne eine Instanz der Klasse anlegen zu muessen:doSomethingWithTheIcon( MediaLibrary.getIcon() );
Okay, dann war mein Fehler dass ich annahm das getClass() auf das Objekt zugreift, und es somit X mal Verfuegbar ist, eben in dem aktuellen Objekt.
Reiner Denkfehler...
Wobei eins waere da noch, greift dann getClass() auf den Ordner im .jar File zu, in dem gerade die Klasse ist?.
Also ich meine Packages, wenn ich im Package "myPackage" getClass() mache, hab ich dann die Dateien vom Ordner myPackage, oder vom Hierachich hoechsten?
Bin mir nicht sicher, da ich das noch nie verwendet habe - aber ich wuerde mal stark vermuten, dass du die hoechste Ebene im .jar file kriegst. Wobei ich mich auch dunkel dran erinnern kann dass da irgendein Unterschied war, ob man am Anfang des Pfades ein / stehen hatte oder nicht (d.h. "/pathto/myfile" oder "pathto/myfile"). Vielleicht kriegt man im ersten Fall das toplevel Verzeichnis und im zweiten relativ zum aktuellen Package. Das sollte aber in der API-Doku stehen...
« Wie kann ich Programme selbst schreiben? | Fahrstuhlprogramm » | ||