【问题标题】:Java: How to tell which fontconfig file my system is currently using?Java:如何判断我的系统当前正在使用哪个字体配置文件?
【发布时间】:2016-04-27 01:40:38
【问题描述】:

我正在尝试在第三方 Java 应用程序中调试与字体相关的问题。具体来说,ChemAxon JChem。我一直在咨询本指南: http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html

部分问题是我不确定我的 Java 设置当前引用的是哪个 fontconfig.properties.src 文件。

这是我的字体配置文件:

$ ls fontconfig*src 
fontconfig.Fedora.properties.src  fontconfig.properties.src   
fontconfig.SuSE.properties.src  fontconfig.Ubuntu.properties.src

我的系统是 CentOS 系统,所以我想它可能是在引用默认的 fontconfig.properties.src 文件或 fontconfig.Fedora.properties.src 文件,因为 CentOS 和 Fedora 都是从 Red Hat 派生的。

那么,我可以确定我的系统正在使用哪个fontconfig 文件吗?

谢谢,

-约翰·大卫

【问题讨论】:

    标签: java centos fontconfig


    【解决方案1】:

    JRE 类 sun.awt.FontConfiguration 已经为此进行了日志记录,您只需启用它即可。

    • 将此选项添加到 Java -Dsun.java2d.debugfonts=true
    • 编辑 jre/lib/logging.properties

    改变这一行

    java.util.logging.ConsoleHandler.level = ALL
    

    添加这一行

    sun.awt.FontConfiguration.level = ALL
    

    然后你会在你的标准错误中看到这样的一行(记录器出于某种原因使用标准错误)

    CONFIG: Read logical font configuration from /your/path/jre/lib/fontconfig.RedHat.6.bfc
    

    【讨论】:

      【解决方案2】:

      只需使用 strace 来检查哪些文件已成功打开:

      $ strace -f -e open java ... 2>&1 | grep fontconfig
      [pid  3321] open("/usr/java/jdk1.7.0_55/jre/lib/fontconfig.RedHat.6.bfc", O_RDONLY|O_LARGEFILE) = 115
      

      如果这没有告诉您它正在使用哪个文件,则很可能它正在使用系统范围的字体配置。然后你会得到这样的输出:

      [pid  3259] open("/usr/java/jdk1.7.0_55/jre/lib/i386/xawt/libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
      [pid  3259] open("/usr/java/jdk1.7.0_55/jre/lib/i386/xawt/../libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
      [pid  3259] open("/usr/java/jdk1.7.0_55/bin/../lib/i386/jli/libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
      [pid  3259] open("/usr/lib/libfontconfig.so.1", O_RDONLY) = 116
      

      【讨论】:

        【解决方案3】:

        您可以使用上述选项,但从 JDK 7 和 8 开始,JDK 存在问题,对于任何 Linux 操作系统都没有选择 fontconfig 文件。它默认为操作系统中存在的 libfontconfig。

        这里是缺陷 URL http://bugs.java.com/view_bug.do?bug_id=7175487

        【讨论】:

          【解决方案4】:

          它永远不会查看 X.properties.src 文件——这些文件本质上是为了告诉你匹配的 X.bfc 的内容是什么。这描述了检查文件的确切顺序:

          http://docs.oracle.com/javase/1.5.0/docs/guide/intl/fontconfig.html#loading

          【讨论】:

            【解决方案5】:

            尝试监控打开的文件,使用命令行工具 lsof,例如

            lsof -r | grep fontconfig
            

            【讨论】:

            • 您好,谢谢您的建议。不幸的是,这只会在我的 ~/.fontconfig 目录中显示二进制文件。打开这些文件确实会显示我的 /usr/share/fonts/ 目录中字体目录的一些路径,但不会显示实际引用了哪些 fontconfig.properties 文件。
            • 也许它没有阅读它们中的任何一个!您可以尝试在调试器中单步执行代码。
            • 我怀疑它正在读取文件然后立即关闭它.. .
            猜你喜欢
            • 2019-11-14
            • 1970-01-01
            • 2015-08-07
            • 2013-07-03
            • 2017-01-16
            • 2012-06-21
            • 2016-02-11
            • 1970-01-01
            • 2011-05-31
            相关资源
            最近更新 更多