# Schriftarten importieren - mit getClass().getResource()?



## Dirt Devil (25. Mrz 2007)

Hi Leute,

ich hab mal wieder das Problem bei den Applets, externe Dateien (hier eine Schriftart im TrueType-Format) einzulesen. Im Appletviewer läuft alles wie am Schnürchen, nur im Browser gibts wieder einmal Mecker.
Hier erst mal der Code:


```
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class test extends JApplet
{
    Font fTest;
    String msg;

    public void init()
    {
        getDocumentBase();
        getCodeBase();
        try
        {
            fTest = Font.createFont(Font.TRUETYPE_FONT, new File("abc.ttf"));
            fTest = fTest.deriveFont( 20f );
            msg = "Datei erfolgreich geladen!";
        }
        catch (IOException e)
        {
            msg = "Datei nicht gefunden!";
        }
        catch (FontFormatException d)
        {
            msg = "Font Format inkompatibel!";
        }
    }


    public void paint(Graphics g)
    {
        g.setFont(fTest);
        g.setColor(Color.white);
        g.fillRect(0, 0, 200, 100);
        g.setColor(Color.black);
        g.drawString("AAA", 20, 20);
        g.drawString(msg,20,50);
    }
}
```

Im Browser wird der Text "Datei nicht gefunden!" ausgegeben; es wird also eine IOException geworfen.

Ich habe in anderen Threads gelesen, dass das Laden solcher Dateien in den Browser-Applets mit dem Befehl "getClass().getResource()" möglich ist. Leider bin ich noch nicht dahinter gekommen, wie ich diesen Befehl einbinden kann, da "getClass().getRessource()" eine URL zurückgibt und ein FileInputStream damit nicht viel anfangen kann.

Ich wäre euch sehr dankbar, wenn ihr meinen Quelltext ergänzen könntet, da mich langsam diese Java-Security zu nerven beginnt  :roll: 

Vielen Dank im Vorraus,
Dirt Devil

P.S.: Ich habe eine signierte *.jar Datei erstellt, auf das das HTML-Document als ARCHIVE zurückgreift. So weit bin ich schon  :bae:


----------



## Wildcard (25. Mrz 2007)

Mach den Font doch einfach in das jar.
Dann kommst du mit getClass().getResource an die Datei.
new File("abc.ttf")
Das Applet läuft auf dem Client, du suchst also nach der Datei abc.ttf im aktuellen user-dir des Client Rechners.


----------



## Dirt Devil (25. Mrz 2007)

Hab ich doch alles schon getan. "abc.ttf" hab ich schon in die jar Datei gepackt, passiert aber nicht sonderlich mehr....

Also in der jar Datei befinden sich die beiden folgenden Dateien:
test.class
abc.ttf

Inhalt des HTML-Dokuments:

```
<html>
    <head>
        <title>test Applet</title>
    </head>
    <body>
        <h1>test Applet</h1>
        <hr>
        <applet
            archive="test.jar"
            code="test.class" 
            width=500 
            height=500
            alt="Your browser understands the &APPLET& tag but isn't running the applet, for some reason."
         >
            Your browser is ignoring the &APPLET& tag!      
        </applet>
        <hr>
    </body>
</html>
```

Ich hoffe ihr könnt mit diesen genaueren Informationen mehr anfangen.


----------



## Wildcard (25. Mrz 2007)

auf Resourcen in einer jar kann man nur mit getResource zugreifen.
Das Verzeichnis das die Schrift enthält muss dabei im Manifest bekannt gegeben werden.


----------



## Dirt Devil (25. Mrz 2007)

ich habe die signtool.bat genutzt: www.java-forum.org/de/viewtopic.php?t=18083&highlight=signtool

Ich glaube, da wird alles in die Manifest gepackt.


----------



## Dirt Devil (25. Mrz 2007)

Kannst du bitte die Initialisierung des Fonts als Beispiel in deine nächste Antwort schreiben? Ich komm nicht hinter die Nutzung des getClass().getResource().
Danke


----------



## Wildcard (25. Mrz 2007)

```
Font f = Font.createFont(Font.PLAIN, getClass().getResourceAsStream("/path/to/abc.ttf"));
```


----------



## Dirt Devil (25. Mrz 2007)

Es klappt!  :applaus: 
Ich danke dir von Herzen   :bae: 
Du bist mein neuer Held für die nächste Zeit   

Vielen vielen Dank,
Dirt Devil


----------

