Java Apache POI缺少动态库libfreetype.so

Java Apache POI缺少动态库libfreetype.so,java,apache-poi,headless,netbsd,Java,Apache Poi,Headless,Netbsd,我使用ApachePOI编写电子表格。有问题的一行是调用Sheet#autoSizeColumn(int-column)。如果在没有图形环境的unix shell上运行它,则会出现以下异常: Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: /usr/pkg/java/openjdk7/jre/lib/amd64/xawt/libmawt.so: Shared object "libXext.so.7" not foun

我使用ApachePOI编写电子表格。有问题的一行是调用
Sheet#autoSizeColumn(int-column)
。如果在没有图形环境的unix shell上运行它,则会出现以下异常:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: /usr/pkg/java/openjdk7/jre/lib/amd64/xawt/libmawt.so: Shared object "libXext.so.7" not found
根据需要,有一个属性应该设置为向headless environment发送信号,因此我尝试以下调用:

 java -jar -Xmx200m -Djava.awt.headless=true myJar.jar
但同一行的另一个例外是:

Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: /usr/pkg/java/openjdk7/jre/lib/amd64/libfontmanager.so: Shared object "libfreetype.so.7" not found
上面的apache指南还说“我应该确保您的工作簿中使用的字体对Java可用”。我真的不使用任何特定的字体,我唯一使用字体的就是

XSSFFont boldFont = (XSSFFont) wb.createFont();
boldFont.setBold(true);
titleRowStyle.setFont(boldFont);
unixshell运行

openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-pkgsrc_2015_01_06_05_56-b00)
OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode)


是否可以修复此问题?

我在系统中发现了较旧的库版本:

bash-4.3$ find /usr -name "libfreetype.*"
find: /usr/games/hide: Permission denied
/usr/pkg/lib/libfreetype.la
/usr/pkg/lib/libfreetype.a
/usr/pkg/lib/libfreetype.so
/usr/pkg/lib/libfreetype.so.6
/usr/pkg/lib/libfreetype.so.6.11.3
然后,我为最新的可用版本创建了一个符号链接,就像它是版本7一样:

ln -s /usr/pkg/lib/libfreetype.so.6.11.3 ~/tmp/lib/libfreetype.so.7
现在用一个环境变量启动我的jar文件:

LD_LIBRARY_PATH=~/tmp/lib java -jar -Xmx200m -Djava.awt.headless=true myJar.jar

我有一个类似的问题。给我指出了正确的方向。基本上,如果应用程序位于容器中,请确保您没有使用slim版本


使用
tomcat:9.0.24-jdk11-openjdk-slim
find/usr-name libfreetype.*
显示JVM中未包含的内容。将基本映像更新为tomcat:9.0.24-jdk11-openjdk解决了这个问题。

您是如何安装JVM的?是包裹里的吗?你跳过任何依赖项了吗?您是否安装了freetype?我不是目标机器的管理员,因此很遗憾,我无法向您提供有关JVM安装的详细信息。Freetype似乎已安装,因为
Freetype config
可用。您可能需要在该计算机上安装缺少的库才能正常工作。@centic可以作为非root用户执行此操作吗?通常在安装这些系统库时需要root访问权限。您可以尝试在用户目录中的某个位置手动安装它们,并调整LD_LIBRARY_路径以包含这些内容,但这听起来像是对一个非常常见的库的一种攻击,通常需要有一个完全工作的Java JRE安装。
LD_LIBRARY_PATH=~/tmp/lib java -jar -Xmx200m -Djava.awt.headless=true myJar.jar