在工作表上调用autoSizeColumn时发生崩溃,在Linux下运行(Servicemix)

我已经编写了生成excel的模块,并将其部署在Servicemix下。 在Windows环境中一切都很好,但在Linux下,Servicemix在下面的调用中意外崩溃

for (short i=0;i<=3;i++) { log.trace("AutoSize column {}", i); worksheet.autoSizeColumn(i); } 

我使用POI 4.2-FINAL,FuseESB 4.2,Java 5.0。 但是,没有hs_err * .pid文件。 Servicemix日志在第一个autoSizeColumn调用结束。

有没有人遇到这样的行为,知道这是怎么造成的,怎么来的?

为了能够计算列的宽度,POI需要抓住正在使用的字体,并要求它依次调整每个字符的大小。 在我所知的所有JVM上,这需要一个图形化的环境,因为实际的工作由JVM委托给底层的图形系统。

如果你在Windows上,你总是有一个图形系统,所以没关系。 在Linux上,如果你在服务器的命令行上运行,你可能不会。 (尽管Linux作为桌面很好)

如果你运行在没有运行X服务器的Linux服务器上,你需要告诉Java运行“无头”。 从POI AutoSize文档中获取

要计算列宽,Sheet.autoSizeColumn使用在图形环境不可用时抛出异常的Java2D类。 如果图形环境不可用,则必须告诉Java您正在以无头模式运行并设置以下系统属性: java.awt.headless = true

尝试设置,当你开始你的JVM,我有一个预感它会解决你的问题(这很可能是由于Java没有找到一个完整的图形环境)

嗨,我面临类似的问题。 我没有任何崩溃,但在我的开发环境(Windows)autosizecolumn工作。 在生产环境(类Unix)上没有工作。 我把系统属性java.awt.headless = true,但我仍然有问题。 我解决了这个解决方案,但我添加了所有Arial Family字体。 希望它能帮助任何人。