首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux (Servicemix)下运行时,在工作表上调用autoSizeColumn时崩溃

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

Stack Overflow用户
提问于 2011-09-14 15:01:29
回答 2查看 3.2K关注 0票数 4

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

代码语言:javascript
复制
    for (short i=0;i<=3;i++) {
        log.trace("AutoSize column {}", i);
        worksheet.autoSizeColumn(i);
    }

我使用的是POI4.2版-最终版,Java4.2,FuseESB 5.0。但是,没有hs_err*.pid文件。Servicemix日志在第一次autoSizeColumn调用时结束。

有没有人遇到过这样的行为,并知道它是如何引起的,以及如何解决这个问题的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-14 17:16:00

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

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

如果您在没有运行X服务器的linux服务器上运行,则需要告诉Java运行"headless“。取自POI AutoSize documentation

用于计算列宽的

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

尝试在启动JVM时设置它,我有预感它会解决您的问题(这很可能是由于Java找不到完整的图形环境造成的)

票数 6
EN

Stack Overflow用户

发布于 2012-09-21 00:36:17

嗨,我也遇到过类似的问题。我没有任何崩溃,但在我的开发环境(Windows)上,autosizecolumn可以工作。在生产环境(类Unix)上,它不起作用。我放置了系统属性java.awt.headless=true,但是我仍然有这个问题。我解决了跟随this solution的问题,但我添加了所有的Arial系列字体。希望这对任何人都有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7412457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档