Font mittels ClassLoader in .jar wirft NotFoundException

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe eine grafische Anwendung geschrieben, die eine Fontdatei(ttf) als Schriftart nutzen soll. In der IDE(eclipse) habe ich keine Probleme, wenn ich die Anwendung aber in ein .jar-File exportiere, dann bekomme ich folgende Fehlermeldung:

java.lang.ClassNotFoundException: novaDice.DiceView
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
at com.exe4j.runtime.WinLauncher.main(Unknown Source)

Die Font-Datei lade ich im Konstruktor der Klasse "DiceBackgroundPanel extends JPanel" mit folgendem Code:
Code:
private final String		BILDPFAD = "/ordnerName/"; 

try {
	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((getClass().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
} 
catch (Exception e) {
	e.printStackTrace(); // Fehlerbehandlung abgekürzt.
}

Die Fehlermeldung deutet ja darauf hin, dass in der Klasse "DiceView extends JFrame" die run()-Methode des ClassLoader einen "ungültigen/leeren" Pfad erhält. Aber warum? :) In der IDE gehts...ja...das heißt gar nichts mehr, wenn es ein jar ist. Aber bei sämtlichen Bildmaterial und config-Files geht es auch über diesen Weg, mit der Ausnahme, dass ich sonst kein File-Objekt erstelle. Hängt das irgendwie zusammen?
In der Klasse "DiceView extends JFrame" wird übrigens auch nie der ClassLoader aufgerufen, sondern lediglich ein Objekt vom Typ "DiceBackgroundPanel extends JPanel", indem der ClassLoader aufgerufen wird. Daher erkläre ich mir den "falschen" Namen für die auslösende Klasse.

Ich bin dankbar für jeden (geschriebenen) Gedanken. ;)

greetz
SLi
 

thE_29

Top Contributor
Probier mal getClass().getClassLoader() oder so!

In vielen Fällen haben jar Zugriffe in einer IDE ein anderes Verhalten als wenn man es so startet!
 

sliwalker

Top Contributor
Hoi nochmal,

danke für die schnelle Antwort.
War eben nicht angemeldet.

Jetzt bekomme ich eine NullPointerException :(

Code:
try {
//	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((getClass().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((getClass().getClassLoader().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
} 
catch (Exception e) {
	e.printStackTrace();
}

Hab ich was falsch gemacht?

greetz
SLi
 

thE_29

Top Contributor
Also kann er die Klasse nicht finden!

Probier mal Klasse.class.getClassLoader()

Wobei Klasse eben deine Klasse da ist!
 

sliwalker

Top Contributor
Hoi,

leider nicht.
Wieder eine NullPointerException in der IDE.
Wenn ich das exportierte jar ausführe, dann erhalte ich den fehler von oben. :(

Hast Du vielleicht noch eine Idee? Kann doch jetzt nicht daran scheitern :)

Code:
try {
//	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((getClass().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((DiceBackgroundPanel.class.getClassLoader().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
} 
catch (Exception e) {
	e.printStackTrace();
}
 

sliwalker

Top Contributor
Ne, er sagt das die Methode für mein abgeleitetes JPanel nicht definiert ist. Soll ich sie überschreiben und getClass().getClassLoader(9 zurückgeben? Aber das bringt es dann doch auch nicht oder?

Danke nochmal ;)

SLi
 

sliwalker

Top Contributor
Hoi,

also Problem besteht weiterhin.
Ich habe den Code folgendermaßen geändert.
Bringt aber nichts. Mit diesem Code geht es in der IDE.

Code:
try {
//	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File((getClass().getResource(BILDPFAD+"Eurostile.ttf")).toURI()));
	JOptionPane.showMessageDialog(null, ""+(getClass().getResource(BILDPFAD+"Eurostile.ttf")));
	System.out.println(""+(getClass().getResource(BILDPFAD+"Eurostile.ttf")));
	fontRaw = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(new File((getClass().getResource(BILDPFAD+"Eurostile.ttf")).toURI())));
} 
catch (Exception e) {
	e.printStackTrace();
}

Ich habe mir die Pfade angeschaut. In der IDE ist es genau der Pfad in meinem Windows Verzeichnisbaum. Er nimmt auch die Datei des Projekts, nicht die Datei im jar. Ausserdem steht vorne an nur "file:" als Prefix. Bei dem jar, ist der Pfad bis zum jarfile sichtbar, danach ein Ausrufezeichen, dann "/", "orderName", "/" und der Name der Fontdatei. Als Prefix hat er "jar:file:/". So... ist doch richtig oder?

Ich versteh es nicht.

greetz
SLi
 

sliwalker

Top Contributor
Hoi,

habs lösen können.
Aber trotzdem vielen Dank für deine Hilfe.

Die Lösung ist:
Code:
		try {
			fontRaw = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream(BILDPFAD+"Eurostile.ttf"));
		} 
		catch (Exception e) {
			e.printStackTrace();
		}

greetz
SLi
 

thE_29

Top Contributor
Was so ein this alles bewirken kann ;)

Jaja, das mit dem aufs jar file selbst zugreifen ist manchmal recht ärgerlich!

Aber Hauptsache es läuft nun!
 

sliwalker

Top Contributor
Hoi,

naja es lag weniger am this, als daran, dass ich nun kein File-Objekt mehr erstelle, sondern schon dem ClassLoader sage, er soll mir die Datei als InputStream liefern. Anscheinend kann er das besser, als ein File-Objekt erstellen. :/


EDIT: Sehe grad, war ja auch völliger Mumpitz was ich da versucht habe. Erstmal einen FileInputStream erstellen und dann auch noch mit einem File-Objekt, dem ich eine URL als URI übergebe. *Argh*

Ich überlege grad, ob ich vielleicht besoffen war :) Nee..einfach nur bescheuert.

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B flying-saucer-pdf Font Allgemeine Java-Themen 7
T Swing Font String Pixellänge Allgemeine Java-Themen 1
Avarion Font von StyledDocument ändern Allgemeine Java-Themen 0
F TrueType-Font in Single-Line-Font wandeln Allgemeine Java-Themen 0
B java.io.IOException: Problem reading font data. Allgemeine Java-Themen 9
T Font läd länger? Allgemeine Java-Themen 4
P Font aus PDF extrahieren -> im Panel anzeigen Allgemeine Java-Themen 3
S Wie bekomme ich an spezielle Glyph-Kombinationen die ein Font bereithaelt? Allgemeine Java-Themen 6
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
D character kodierung, barcode für barcode font erzeugen Allgemeine Java-Themen 4
H Monospace Font/Schriftart Allgemeine Java-Themen 2
R Font in PDF einbinden Allgemeine Java-Themen 2
Developer_X Java Applet - Font aus datei laden Allgemeine Java-Themen 15
R Font der auf allen Platformen gleich aussieht? Allgemeine Java-Themen 7
G Font richtig vergrößern Allgemeine Java-Themen 4
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
W PDFs signieren mittels IText / Lowagie Allgemeine Java-Themen 0
Zrebna Möglichkeit regelmäßige indentation mittels/innerhalb Stringbuilder Allgemeine Java-Themen 14
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
D HTTP Http-Link mittels GUI schreiben Allgemeine Java-Themen 5
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
J GUI-Einstellungen mittels Preferences Allgemeine Java-Themen 6
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
E Videosequenz mittels Java aus Video schneiden Allgemeine Java-Themen 10
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
RySa Variablenname mittels Reflexions rausbekommen (als String) ? Allgemeine Java-Themen 9
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
T Wie rufe ich mittels String-Inhalts eine Methode auf? Allgemeine Java-Themen 3
T Exif mittels Java auslesen Allgemeine Java-Themen 14
A Sudoku mittels Backtracking Problem Allgemeine Java-Themen 6
7 Webseiten mittels Java auslesen Allgemeine Java-Themen 7
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
O Programm mittels Java installieren Allgemeine Java-Themen 15
S Array-Sort mittels Binärsuche Allgemeine Java-Themen 2
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
S Eingabeprüfung mittels Regexp Allgemeine Java-Themen 5
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
E Aus mehreren PDFs eines machen, zusammenfügen mittels iText Allgemeine Java-Themen 1
G Graph mittels Punkte erstellen Allgemeine Java-Themen 27
M Problem bei PDF-Anzeige mittels Acrobat Viewer Bean Allgemeine Java-Themen 2
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
spacegaier Performanceproblem beim Einlesen aus Datei mittels Threads Allgemeine Java-Themen 23
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
B Html Formulare mittels Java automatisch senden Allgemeine Java-Themen 5
E import mittels Eclipse Allgemeine Java-Themen 3
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
J Tonbalance mittels JMF regeln Allgemeine Java-Themen 3
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
K Mittels Generics eine Methode verallgemeinern Allgemeine Java-Themen 2
A FTPS bzw. FTP over SSL mittels Java Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
G mysql datum umwandeln mittels jsp Allgemeine Java-Themen 10
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
P E-Mails mittels POP3 abrufen Allgemeine Java-Themen 2
S mail von server mittels mailapi löschen Allgemeine Java-Themen 2
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
L Eigenener ClassLoader wirft java.lang.NoClassDefFoundError Allgemeine Java-Themen 0
D Classloader ohne Package Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
schlingel Webstart/Applet Problem - Classloader-Bug Allgemeine Java-Themen 7
M Security Manager für bestimmte Klassen/Classloader? Allgemeine Java-Themen 3
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
C inteface not visible from classloader Allgemeine Java-Themen 2
M jdbc treiber (h2) mit eigenem ClassLoader laden Allgemeine Java-Themen 4
B Eigener ClassLoader Allgemeine Java-Themen 9
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
S Problem mit ClassLoader.getSystemResource !! Allgemeine Java-Themen 3
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
E Wieder mal der Classloader Allgemeine Java-Themen 6
F ClassLoader und "Cache" Allgemeine Java-Themen 2
MQue ClassLoader Allgemeine Java-Themen 5
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
P Klasse über eigenen Classloader laden: SecurityException Allgemeine Java-Themen 11
N Classpath mit ClassLoader künstlich erweitern Allgemeine Java-Themen 2
P System.getProperty zu Classloader Allgemeine Java-Themen 21
G Classloader Problem Allgemeine Java-Themen 10
M Bibliotheksname zur Laufzeit ermitteln (Classloader) Allgemeine Java-Themen 7
MQue ClassLoader Allgemeine Java-Themen 18
G Problem mit URL classloader Allgemeine Java-Themen 10
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
F mit classloader klassen ausserhalb *.jar einlesen Allgemeine Java-Themen 4
P Kompilerfehler: at java.lang.ClassLoader.loadClassInternal(U Allgemeine Java-Themen 16
T ClassLoader und Zugriff auf unbekannte Klassen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben