Сбой при вызове autoSizeColumn на листе при запуске в Linux (Servicemix) - PullRequest
4 голосов
/ 14 сентября 2011

Я написал модуль, который генерирует 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.

Кто-нибудь встречал такое поведение и знает, как оно вызвано и как это исправить?

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Чтобы иметь возможность вычислить ширину столбца, POI необходимо получить доступ к используемому шрифту и попросить его поочередно определить размер каждого символа.На всех известных мне JVM это требует графической среды, потому что виртуальная работа делегируется JVM базовой графической системе.

Если вы работаете в Windows, у вас всегда есть графическая система, так чтохорошо.В Linux, если вы работаете в командной строке на сервере, вы не можете.(Linux как настольный компьютер хорош, хотя)

Если вы работаете на сервере Linux без X-сервера, вам нужно указать Java запускаться «без головы».Как взято из документации POI AutoSize

Для вычисления ширины столбца Sheet.autoSizeColumn использует классы Java2D, которые выдают исключение, если графическая среда недоступна.В случае, если графическая среда недоступна, вы должны указать Java, что вы работаете в автономном режиме, и установить следующее системное свойство: java.awt.headless = true

Попробуйтеустановив, что при запуске JVM, и у меня есть догадки, это исправит вашу проблему (которая, скорее всего, вызвана тем, что Java не находит полную графическую среду)

0 голосов
/ 20 сентября 2012

Привет, я столкнулся с подобной проблемой.У меня не было сбоев, но в моей среде разработки (Windows) автоколонка работала.В производственной среде (Unix-like) это не сработало.Я поместил системное свойство java.awt.headless = true , но у меня все еще была проблема.Я решил следующее это решение , но добавил все шрифты семейства Arial.Надеюсь, это кому-нибудь поможет.

...