Java Resource File in Jar ansprechen

diamdomi

Admiral
Registriert
Mai 2009
Beiträge
7.451
Hallo zusammen,

Ich benutze Netbeans in der Version 8.1.

in eine Java Klasse hole ich mir eine Schrift über folgenden Pfad: new File("Resources/coders_crux.ttf").
Die Dateistruktur sieht so aus: "Projektname/Resources/coders_crux.ttf".

Wenn ich das Programm über die IDE laufen lasse, dann klappt auch alles wunderbar.


Nun möchte ich das Projekt erstellen. Ich habe schon den Resource Order dem Source Package Folder (Projekt -> Einstellungen -> Sources) hinzugefügt. Die ttf Datei ist auch im JAR File enthalten (aber nicht in einem Ordner).
Da klappt es natürlich nicht.

Meine Vermutung: Es muss in den Build Path. Habe schon vieles probiert und bin leider nicht weiter gekommen.


Kann mir da jemand helfen?

Mfg
 
Probier mal:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("coders_crux.ttf").getFile());

oder nur

File file = new File(getClass().getResource("/coders_crux.ttf").getFile());
 
Zuletzt bearbeitet:
Funktioniert nicht. Wo soll denn die ttf Datei abgelegt werden? Habe verschiedene Orte probiert

Meine normale Struktur:

Projekt
____src
____Package
________java-Files
____Resources
________coders_crux.ttf
 
Zuletzt bearbeitet:
In dem Fall:


Deine Struktur sollte sein (alles unter /src):


Projekt
____src
______Package
________java-Files
______Resources
________coders_crux.ttf

File file = new File(getClass().getResource("/Resources/coders_crux.ttf").getFile());



Wenn die coders_crux.ttf im gleichen package (Ordner) liegt wie die Java Klasse die sie läd, sollte

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("coders_crux.ttf").getFile());
oder nur
File file = new File(getClass().getResource("/coders_crux.ttf").getFile());

funktionieren.
 
Zuletzt bearbeitet:
Habe die ttf Datei in das Package der Javaklasse eingefügt.

File file = new File(getClass().getResource("/coders_crux.ttf").getFile());

-> Exception in thread "Thread-2" java.lang.NullPointerException


Lasse ich das / weg kommt später folgender Fehler: java.io.IOException: Can't read C:\---\NetBeansProjects\Game%20Pong\build\classes\Main\coders_crux.ttf


Wenn ich den Ordner (natürlich mit der ttf Datei) bei src einfüge und folgenden Befehl nutze:
File file = new File(getClass().getResource("/Resources/coders_crux.ttf").getFile());
-> dann kann er es auch nicht lesen
 
Zuletzt bearbeitet:
sry. Mein Fehler. Im Fall ohne classloader muss der Pfad absolut sein. Also :
File file = new File(getClass().getResource("/Resources/coders_crux.ttf").getFile());
 
Aktuell sieht es so aus:

src
____Main (Package)
________java-Files
____Resources (Package)
________coders_crux.ttf

im Java File folgenden Befehl genutzt:
File file = new File(getClass().getResource("/Resources/coders_crux.ttf").getFile());

Folgender Fehler: java.io.IOException: Can't read C:\...\NetBeansProjects\Game%20Pong\build\classes\Resources\coders_crux.ttf


Die Datei wäre auch im JAR File vorhanden (auch mit der korrekten Ordnerstruktur). Das holen der Datei funktioniert somit vermutlich, nur das benutzen von dieser nicht?
 
Zuletzt bearbeitet:
Was versuchst Du denn mit dem File zu machen? Die Fehlermeldung ist nicht aussagekräftig. Wäre interessant den Stacktrace zu sehen.
 
Sry, hab ich vergessen einzufügen:

Font crux = Font.createFont(Font.TRUETYPE_FONT, file).deriveFont(125f);

Genauere Fehlermeldung: at java.awt.Font.createFont(Font.java:1054)
Allerdings komme ich auf diese Klasse nicht drauf :(

Statt file stand davor (bevor ich die Front auch im JAR File nutzen wollte und mit der alten Ordnerstruktur) " new File("Resources/coders_crux.ttf") ". Das hat in der IDE funktioniert


Die Lösung von stackoverflow habe ich schon probiert. Habe es mit etwas umformulieren hin bekommen, aber nur wieder in der IDE.
 
Zuletzt bearbeitet:
Wenn du in die erstellte jar mit z.B. Winrar einschaust, ist dann die "coders_crux.ttf" auch mit drin?
 
Mit folgendem Code:

File file = new File(getClass().getResource("/Resources/coders_crux.ttf").getFile());

try {
____Font crux = Font.createFont(Font.TRUETYPE_FONT, file).deriveFont(125f);
...}

ist im JAR File zwar das Package drinne, jedoch nicht die Datei.

Wenn ich den Code in der IDE so ausführe bekomme ich hier den Fehler (wie schon oben geschrieben):
java.io.IOException: Can't read C:\...\NetBeansProjects\Game%20Pong\build\classes\Resources\coders_crux.ttf
____at java.awt.Font.createFont(Font.java:1054)
____at Main.GameLabel.init(GameLabel.java:92)



EDIT:
Sehe gerade, dass er die Datei in der JAR in das <default package> geschoben hat.
 
Zuletzt bearbeitet:
Dann ist doch alles klar. Wenn die ttf nicht drin ist muss die da rein. Schau mal im Projektordner ob es ein "bin" Verzeichnis gibt und kopiere die ttf in das entsprechende Package. Oder im NetBeans beim Export der jar muss es sowas geben wie "Resourcen mit exportieren".
Ich kenn mich nicht so mit Netbeans aus da ich immer Eclipse nutze.
 
An den Einstellungen konnte ich jetzt was ändern, damit es an der richtigen Stelle liegt:

cb_pong.png

Jedoch ist die Schrift weder in der IDE noch in der JAR aktiv. Selbe Fehlermeldung:
java.io.IOException: Can't read C:\...\NetBeansProjects\Game%20Pong\build\classes\Resources\coders_crux.ttf
____at java.awt.Font.createFont(Font.java:1054)


Werde es heute Abend mit Eclipse probieren, vlt liegt hier tatsächlich ein Fehler.
 
Zuletzt bearbeitet:
Dein Problem hatte damit zu tun, dass der Datentyp "File" nicht aus den Resources stammen darf innerhalb einer Jar.
 
Zurück
Oben