并非所有 TTF 字体都可以在 (Sun) JDK 中看到

并非所有 TTF 字体都可以在 (Sun) JDK 中看到

我想将 Monaco.ttf 与 IntelliJ 一起使用。不幸的是,它没有显示。

我还注意到 Monaco 字体没有出现在从 awt 获取的字体列表中:

java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()

我在 /usr/share/fonts/truetype/osx 安装了 Monaco.ttf

我也尝试将其复制进去/usr/lib/jvm/java-6-sun/jre/lib/fonts,甚至尝试手动更新/usr/lib/jvm/java-6-sun/jre/lib/fonts/fonts.dir文件

每次尝试时我都重新启动 jvm,但是在 sun jdk 中看不到字体。

所有其他应用程序都可以看到该字体(甚至是 eclipse,它是用 Java 编写的,但使用了 SWT 库)

有人知道如何让 jdk 看到其他字体吗?

答案1

问题出在 Monaco 字体本身,它似乎没有合适的元数据,并且是一个 hacky 端口,因此 Java 无法识别它。也许您可以找到此 TTF 文件的其他版本,效果会更好,或者尝试使用 FontForge 自行修复它。

另请参阅我的评论在 IntelliJ IDEA 问题跟踪器中。

答案2

您需要按此顺序运行mkfontscalemkfontdir实用程序,以更新 fonts.dir 文件。

/usr/lib/jvm/java-6-sun/jre/lib/fonts从终端进入目录并运行

sudo mkfontscale
sudo mkfontdir

mkfontscalemkfontdir创建可用于创建的fonts.scale文件fonts.dir

答案3

更新字体缓存

sudo fc-cache -f -v

答案4

您是否尝试过拨打:

java.awt.GraphicsEnvironment.getAllFonts()

看起来 Java 字体系统有点混乱:

http://www.sabi.co.uk/Notes/linuxFonts.html#fontSwJava

您可能需要解决查找字体的问题。但是如果 eclipse 可以看到字体,那么您的应用程序就没有理由看不到。您甚至可以选择查看 eclipse 代码,看看他们是如何做到的。

http://java.sun.com/products/java-media/2D/reference/faqs/#Font_and_Text_questions

相关内容