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

我想在IntelliJ中使用Monaco.ttf。 不幸的是它没有出现。

我还注意到摩纳哥字体没有出现在从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看到其他字体?

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

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

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

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

 sudo mkfontscale sudo mkfontdir 

mkfontscale创建fonts.scale文件, mkfontdir可以使用它创建fonts.dir

更新字体缓存

 sudo fc-cache -f -v 

你试过打电话:

 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