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

时间:2014-06-03 15:16:13

标签: java macos fonts awt

为什么以下程序会根据我登录的方式返回不同的结果?我在新安装的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中字体可用性的这种变化?

0 个答案:

没有答案