2016-12-29 13 views
0

私はvaadinスプレッドシートを使用しています。私のプログラムでは、isBold、isItalicなどのデータベースに格納されたメタデータを読み込み、メタデータに応じてイタリック、太字などのスタイルをセルに適用しています。これらのスタイルを適用すると、spreadsheet.getSpreadsheetStyleFactory()を使用してセルをリフレッシュする必要があります。cellStyleUpdated(cell、true); (VaadinスプレッドシートAPI)。 java.lang.ArrayIndexOutOfBoundsException:java.util.ArrayList.elementData(ArrayList.java:400)で-32768 [rt.jarの:このAPIは、時々によって引き起こさgetFontIndex()APIが負のインデックスを返す場合のシナリオは何ですか?

下に見出すことができるスローは、ArrayIndexOutOfBoundsExceptionを失敗1.7 .0_80] at java.util.ArrayList.get(ArrayList.java:413)[rt.jar:1.7.0_80] at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:386) [seqnc-common-jar-1.0.0.jar:] at org.apache.poi.xssf.usermodel.XSSFCellStyle.getFont(XSSFCellStyle.java:557)[seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.XSSFColorConverter.colorStyles(XSSFColorConverter.java:97)[seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.addCellStyleCSS(SpreadsheetStyleFactory.java:594)[seqnc-common-jar-1.0.0.jar:] at com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.cellStyleUpdated(SpreadsheetStyleFactory.java: 461)[seqnc-共通ジャー-1.0.0.jar:]

ここで起こっている何がXssfCellStyleが何らかの形のArrayListに指標として使用されている負の屈折率を有する-32768です。私はちょうどfontIndexがXssfCellStyle

+0

Apache POIのどのバージョンを使用していますか?最新のものでない場合は、アップグレードするとどうなりますか? – Gagravarr

+0

@Gagravarr私は最新のものであるバージョン3.15を使用しています –

+0

3.16ベータ1を試すことができますか?それが助けにならない場合は、非常に小さなExcelファイルと一緒に問題を示す小さなjunitテストケースを作成できますか? – Gagravarr

答えて

0

に負の値に設定されますどのようなシナリオの下で知りたい

は、問題を発見しました。私のコードは不必要にたくさんの(約40,000文字の)Fontオブジェクトを作成していました。したがって、40K + fontindexsを格納する必要がありました。私はXSSFCellStle.getFontIndexのソースを見たとき、私は、インデックスの値が上記のいずれかの指標だから、32767でショートデータ型の制限を超えた、より40Kのオブジェクトを持っていたので、しかし、()メソッドの整数インデックスは、型キャストは短い

@Override 
public short getFontIndex() { 
    return (short) getFontId(); 
} 

にしました32767はマイナスの短期金額となりました。 Fontオブジェクトを32767以下の範囲に制限して問題を解決しました

関連する問題