Baixei uma fonte de texto e quero usar ela em minha aplicação java, dei uma pesquisada e cheguei no seguinte código:
public class Fonte {
private final String fontAmerikaDir = "/br/paulo/damas/res/font/AMERIKA_.tff";
public Font getFont() {
Font font;
try {
InputStream is = new FileInputStream(fontAmerikaDir);
font = Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream(fontAmerikaDir)).deriveFont(12f);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(fontAmerikaDir)));
} catch(Exception e) {
e.printStackTrace();
System.err.println(fontAmerikaDir + " não carregada. Usando fonte serif.");
font = new Font("serif", Font.PLAIN, 24);
}
return font;
}
}
Só que o programa não está conseguindo achar o caminho da fonte, ele me retorna esse erro:
java.io.FileNotFoundException: br\paulo\damas\res\font\AMERIKA.tff (O sistema não pode encontrar o caminho especificado)
Qual o problema? como faço com que ele consiga encontrar o caminho da fonte?
O problema é que você está tentando instanciar um FileInputStream passando um caminho absoluto inválido.
Você não precisa daquele FileInputStream, você só precisa obter um InputStream a partir do caminho relativo do arquivo TTF em relação ao classpath da aplicação.
Eu modifiquei o seu código, mas não cheguei a testar, veja:
public class Fonte {
private static final String fontAmerikaDir = "/br/paulo/damas/res/font/AMERIKA_.tff";
private Font font;
public Font getFont() {
if (font == null) {
try {
InputStream arquivoTTF = getClass().getResourceAsStream(fontAmerikaDir);
font = Font.createFont(Font.TRUETYPE_FONT, arquivoTTF).deriveFont(12f);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
} catch(Exception e) {
e.printStackTrace();
System.err.println(fontAmerikaDir + " não carregada. Usando fonte serif.");
font = new Font("serif", Font.PLAIN, 24);
}
}
return font;
}
}