由于某种原因,我无法在我的应用中加载任何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)
答案 0 :(得分: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()方法只是在构造中打破一个合适的Inputstream。获取加载方法使用的合适URL或URI可能有点棘手。