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

Dan*_*lor 4 java linux crash apache-poi apache-servicemix

我编写了生成excel的模块,并在Servicemix下部署了它.在Windows环境中一切都很好,但在Linux Servicemix下意外崩溃后跟随调用:

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

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

有没有人遇到过这种行为并且知道它是如何引起的以及如何绕过这个?

Gag*_*arr 5

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

如果你在Windows上,你总是有一个图形系统,所以没关系.在Linux上,如果您在服务器上的命令行上运行,则可能不是.(Linux作为台式机虽然很好)

如果您在没有运行X服务器的Linux服务器上运行,则需要告诉Java运行"无头".取自POI AutoSize文档

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

尝试在启动JVM时进行设置,并且我预感到它将解决您的问题(这很可能是由于Java找不到完整的图形环境引起的)