为什么在使用ssh时,GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()会给出不同的结果?

Cod*_*ddy 5 java macos fonts awt

为什么以下程序会根据我的登录方式返回不同的结果?我正在使用Java 7 update 60在新安装的Mac OS X Mavericks系统上编译和运行该程序.如果我在登录系统时在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());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

正常登录时我得到521字体,如果我然后ssh并运行程序我得到725.

最初我认为这可能与我在ssh时无图形的图形环境有关 - 所以我在正常登录时像这样运行它:

java -Djava.awt.headless=true FontList
Run Code Online (Sandbox Code Playgroud)

这对输出没有影响.当我使用su登录时,也可以重现这种差异.假设我已经以stackoverflow身份登录:

su -l stackoverflow
Run Code Online (Sandbox Code Playgroud)

然后运行程序给出与使用ssh时相同的结果.

我尝试使用Apple Java 6,不管我是如何登录的,都提供相同的输出.我也在使用Java 7(Oracle和OpenJDK)的Linux上尝试过这种方法.

任何人都可以解释是什么原因导致MAC OS X上Java 7中字体可用性的这种变化?