为什么以下程序会根据我登录的方式返回不同的结果?我在新安装的Mac OS X Mavericks系统上使用Java 7 update 60编译和运行该程序。如果我在登录系统时在shell中编译并运行它,通常我得到的字体少于我进入系统并运行它时的字体。
该计划如下:
import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class FontList
{
public static void main(String[] args)
{
final Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
System.out.println("Fonts found: " + fonts.length);
for (Font font : fonts)
{
System.out.println(font.getName());
}
}
}
正常登录后我得到521种字体,如果我然后ssh并运行程序我得到725。
最初我认为当我进入ssh时图形环境无头时可能会出现这种情况 - 所以我在正常登录时就像这样运行:
java -Djava.awt.headless=true FontList
对输出没有影响。当我使用su登录时,也可以重现这种差异。假设我已经以stackoverflow身份登录:
su -l stackoverflow
然后运行程序会得到与使用ssh时相同的结果。
我尝试使用Apple Java 6,无论我是如何登录的,它都提供相同的输出。我也在使用Java 7(Oracle和OpenJDK)的Linux上尝试过这种方法。
任何人都可以解释是什么原因导致MAC OS X上Java 7中字体可用性的这种变化?