3

我使用 Apache POI 编写电子表格。有问题的行是我调用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

根据apache 的快速指南,应该设置一个属性来表示无头环境,所以我尝试以下调用:

 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);

unix shell 运行

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)

NetBSD *** 6.1.5 NetBSD 6.1.5 (jajo) #1: Sun Jun 21 09:13:03 UTC 2015  spaj@***:/usr/src/sys/arch/amd64/compile/jajo amd64

有可能解决这个问题吗?

4

2 回答 2

2

我在系统中找到了一个较旧的库版本:

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
于 2015-12-13T23:03:01.353 回答
1

我有一个类似的问题。丹尼的回答为我指明了正确的方向。基本上,如果应用程序位于Tomcat Docker容器中,请确保您没有使用 slim 版本。

使用tomcat:9.0.24-jdk11-openjdk-slim,find /usr -name libfreetype.*表明FreeTypelibfreetype未包含在 JVM 中。更新基础映像以tomcat:9.0.24-jdk11-openjdk解决此问题。

于 2021-05-25T14:18:45.917 回答