# java.io.IOException: Problem reading font data.



## bnoller (23. Nov 2012)

Hallo alle zusammen...,
bin gerade dabei meine erste Java-Applikation zu schreiben.
Da ich der GUI einen was eigenes verleihen wollte, dachte ich mir mit hilfe von eigenen Fonts die Schriftart zu gestalten.

Aber irgendiwe klappt das ganze nicht so... hier mein bsp.




```
package test;


import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class UserFrame extends JFrame {

        JLabel text;

        public UserFrame() throws FontFormatException, IOException {
            setVisible(true);
            setSize(500, 300);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setTitle("Unser Programm!");
            setResizable(false);
            setLayout(null);

        String fontFileName = "C:\\Documents and Settings\\My Documents\\NetBeansProjects\\Test\\src\\test\\ResidentEvil.ttf";
        InputStream is = this.getClass().getResourceAsStream(fontFileName);

        Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, is);

        Font ttfReal = ttfBase.deriveFont(Font.PLAIN, 24);
            
            
            text = new JLabel("Hallo Welt!");
            text.setBounds(100, 100, 500, 40);
            //Font schrift = text.getFont().deriveFont(Font.BOLD + Font.ITALIC, 40);
            text.setFont(ttfReal);
            add(text);
        }
    }
```


```
package test;

import java.awt.FontFormatException;
import java.io.IOException;
import javax.swing.JFrame;

/**
 *
 * @author Durr Systems
 */
public class MainClass {
    public static void main (String[]args) throws FontFormatException, IOException  {
        JFrame jF = new UserFrame();
    }
    
}
```

Nun bekomme ich folgenen Fehler.
java.io.IOException: Problem reading font data.

Wäre schön, wenn mir jemand helfen könnte.

Liebe Grüße


----------



## Michael... (23. Nov 2012)

In welcher Zeile tritt  der Fehler auf?
Üblicherweise - besonders, wenn man das Programm auch verteilen will - nutzt man den relativen Verweis zur Ressource innerhalb des Packages. Keine Ahnung ob der ClassLoader mit Deiner Angabe überhaupt was anfangen kann.

```
InputStream is = this.getClass().getResourceAsStream("/test/ResidentEvil.ttf");
```

Und nicht vergessen den Stream wieder zu schließen.


----------



## bnoller (23. Nov 2012)

```
Exception in thread "main" java.io.IOException: Problem reading font data.
	at java.awt.Font.createFont(Font.java:967)
	at test.UserFrame.<init>(UserFrame.java:47)
	at test.MainClass.main(MainClass.java:14)
```


die Struktur in meinem Projektordner also:

C:\Documents and Settings\My Documents\NetBeansProjects\ProjectGr33nhat

build
nbproject
src
build.xml
manifest.mf
ResidentEvil.ttf  <-- meine Font

imprinzip kann ich ja mit 


```
is.close();
```

schließen oder?

is.close();


----------



## Michael... (23. Nov 2012)

Im ersten Post war die Datei noch innerhalb des Source Verzeichnises, da würde ich sie eigentlich auch belassen. Prüfe mal den InputStream is auf null. Vermutlich wird die Datei nicht gefunden.


----------



## bnoller (23. Nov 2012)

Danke für die schnelle Antwort. Habe nun den Pfad geändert.
Es wird nun kein Fehler mehr angezeigt. Aber auch die Schriftart nicht.


----------



## bnoller (23. Nov 2012)

Komisch jetzt tuts 
Danke 

Also Lösung war nur der Pfad richtig angeben.


[EDIT]Also was ich komsich finde wenn ich per debug modus alles laufen lasse tuts und wenn ich es normal alufen lasse nicht.[/EDIT]


----------



## Michael... (23. Nov 2012)

Grundsätzlich 
	
	
	
	





```
setVisible(true)
```
 erst zum Schluss aufrufen, wenn alles konfiguriert ist und das Layout steht.


----------



## bnoller (23. Nov 2012)

Ok jetzt funktioniert beides.
Aber wieso ist das so?
Sry aber mich interessiert sowas immer will ja was lernen dabei.


----------



## Michael... (23. Nov 2012)

Ganz grob: Weil eine bereits sichtbare Komponente nicht unbedingt von alleine prüft, ob Ihr Zustand noch gültig ist. Das passiert dann u.U. erst, wenn sie sich neu zeichnen muss.


----------



## bnoller (24. Nov 2012)

Vielen Dank nochmal!

Echt super freudliche Hilfe und gute Hilfe

Liebe Grüße


----------

