java - 将 stix 字体与 openjdk 一起使用时出现异常?

标签 java apache-poi redhat

当我尝试创建 SXSSFWorkbook 时出现问题。

异常堆栈跟踪:

java.lang.ArrayIndexOutOfBoundsException: 0
    at sun.font.CompositeFont.getSlotFont(CompositeFont.java:351)
    at sun.font.CompositeGlyphMapper.initMapper(CompositeGlyphMapper.java:81)
    at sun.font.CompositeGlyphMapper.<init>(CompositeGlyphMapper.java:62)
    at sun.font.CompositeFont.getMapper(CompositeFont.java:409)
    at sun.font.CompositeFont.canDisplay(CompositeFont.java:435)
    at java.awt.Font.canDisplayUpTo(Font.java:2063)
    at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
    at java.awt.font.TextLayout.<init>(TextLayout.java:531)
    at FontTest.main(FontTest.java:15)

渐变文件:

compile 'org.apache.poi:poi:3.14'
compile 'org.apache.poi:poi-ooxml:3.14'

环境:

  • openjdk 版本“1.8.0_141”
  • 红帽 7.4
  • 野蝇 10.0.0

最佳答案

此问题仅发生在 Red hat version 7.4 上。 据报道there . 红帽人员正在努力修复它 here . 我找到的解决方案只是提供字体,以强制将 Utopia 作为 java 使用的默认字体。

使用以下内容创建以下文件 /etc/fonts/local.conf:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <alias>
    <family>serif</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>dialog</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>dialoginput</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
</fontconfig>

确保正确的用户可以读取该文件。

关于java - 将 stix 字体与 openjdk 一起使用时出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711597/

相关文章:

java - 局部变量和全局变量同名

java - 为什么我的 tomcat 应用程序的内存使用量不断增长?

java - Apache POI : can't re-open workbook: InvalidOperationException

linux - 从 Windows 和 Mac 客户端机器访问 MongoDB

linux - gedit 无响应如何保存我的文件?

linux - 单行退出

java - 当 WebView 中加载特定 URL 时隐藏菜单项

java - 无法理解 Apache commons API 文档中的此方法摘要

java - 写入 XLSX 文件 (POI) 时 JVM 崩溃

java - 读取多个excel文件并将数据推送到java中的各个对象,寻找有效的方法