java.io.IOException: Problem reading font data.

bnoller

Mitglied
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.



Java:
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);
        }
    }

Java:
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
 
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.
Java:
InputStream is = this.getClass().getResourceAsStream("/test/ResidentEvil.ttf");

Und nicht vergessen den Stream wieder zu schließen.
 
Java:
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

Java:
is.close();

schließen oder?

is.close();
 
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.
 
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]
 
Grundsätzlich
Code:
setVisible(true)
erst zum Schluss aufrufen, wenn alles konfiguriert ist und das Layout steht.
 
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.
 

Zurück
Oben