【问题标题】:Unable to load external TTF fonts无法加载外部 TTF 字体
【发布时间】:2015-07-08 20:29:13
【问题描述】:

由于某种原因,我无法在我的应用中加载任何 TTF 字体。这是一个简单的例子:

File f = new File("/blah/font.ttf");
System.out.println(f.canRead());
System.out.println(f.length());
System.out.println(Font.loadFont(new FileInputStream(f), 20));

输出:

true
52168
null

字体未加载。我尝试了不同的字体,但它们都不起作用。可能是什么问题呢?我正在运行 Arch Linux。

$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

【问题讨论】:

标签: javafx


【解决方案1】:

假设您的应用程序中有这样的包结构

下面的代码应该可以工作

import java.io.InputStream;
import javafx.scene.text.Font;

public class AccessTest {

    public static void main(String[] args) throws URISyntaxException, MalformedURLException {
        InputStream is = AccessTest.class.getResourceAsStream("OpenSans-Regular.ttf");
        Font font = Font.loadFont(is, 12.0);
        System.out.println("Font: " +font);

        File f = new File(AccessTest.class.getResource("OpenSans-Regular.ttf").toURI());

        // should not be used because of f.toURL() is deprecated
        Font font1 = Font.loadFont(f.toURL().toExternalForm(), 12.0);
        System.out.println("Font 1: " + font1);

        Font font2 = Font.loadFont(f.toURI().toURL().toExternalForm(), 12.0);
        System.out.println("Font 2: " + font2);

    }
}

这给了我以下输出:

Font: Font[name=Open Sans, family=Open Sans, style=Regular, size=12.0]
Font 1: Font[name=Open Sans, family=Open Sans, style=Regular, size=12.0]
Font 2: Font[name=Open Sans, family=Open Sans, style=Regular, size=12.0]

如果您将字体文件放在包之外,则可能会出现访问冲突。在您的情况下, Font.load() 方法只是在构造合适的输入流时中断。获取加载方法使用的合适的 URL 或 URI 可能有点棘手。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多