2016-12-29 1 views
0

Ich verwende vaadin Tabellenkalkulation. In meinem Programm lese ich Metadaten, die in db wie isBold, isItalic usw. gespeichert sind, und setze diese kursiven, fettgedruckten usw. Stile auf Zelle abhängig von Metadaten. Nachdem ich diese Stile angewendet habe, muss ich die Zelle mithilfe von tabellarisch.getSpreadsheetStyleFactory() aktualisieren. CellStyleUpdated (cell, true); (Vaadin Tabellenkalkulationsprogramm). Diese api versagt manchmal werfen ArrayIndexOutOfBoundsException, die unterIn welchen Szenarien wird die getFontIndex() API einen negativen Index liefern?

gefunden werden kann

Verursacht durch: java.lang.ArrayIndexOutOfBoundsException: -32768 bei java.util.ArrayList.elementData (ArrayList.java:400) [rt.jar: 1.7 .0_80] bei java.util.ArrayList.get (ArrayList.java:413) [rt.jar: 1.7.0_80] bei org.apache.poi.xssf.model.StylesTable.getFontAt (StylesTable.java:386) [seqnc-common-jar-1.0.0.jar:] bei org.apache.poi.xssf.usermodel.XSSFCellStyle.getFont (XSSFCellStyle.java:557) [seqnc-common-jar-1.0.0.jar:] bei com.vaadin.addon.spreadsheet.XSSFColorConverter.colorStyles (XSSFColorConverter.java:97) [seqnc-common-jar-1.0.0.jar:] um com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.addCellStyleCSS (SpreadsheetStyleFactory.java:594) [seqnc-common-jar-1.0.0.jar:] bei com.vaadin.addon.spreadsheet.SpreadsheetStyleFactory.cellStyleUpdated (SpreadsheetStyleFactory.java: 461) [seqnc-common-jar-1.0.0.jar:]

Was hier geschieht, ist XssfCellStyle irgendwie negativen Index -32768 wird, die in Arraylist als Index verwendet wird.

Ich will nur wissen, unter welchen Szenarien Fontindex

+0

Welche Version von Apache POI verwenden Sie? Und wenn es nicht der neueste ist, was passiert beim Upgrade? – Gagravarr

+0

@Gagravarr Ich verwende Version 3.15, die die neueste ist –

+0

Können Sie versuchen, 3.16 Beta 1? Wenn das nicht hilft, können Sie einen kleinen Junit-Testfall erstellen, der das Problem in Verbindung mit einer sehr kleinen Excel-Datei zeigt? – Gagravarr

Antwort

0

gefunden, das Problem zu negativem Wert in XssfCellStyle eingestellt werden. Mein Code erzeugte unnötigerweise viele (Etwa 40.000) Font-Objekte. So wurden 40.000 + Fontindexe benötigt, um sie zu speichern. Aber als ich sah, Quelle XSSFCellStle.getFontIndex() Methode Integer-Index wurde Typ kurz gegossen

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

Weil ich mehr als 40K Objekte hatte, Index-Wert wurde von mehr als Grenzwert für Short-Datentyp, die 32767. So ist jeder Index über 32767 kam als negativer Kurzwert. Ich habe das Problem behoben, indem ich meine Font-Objekte auf einen Bereich unter 32767 begrenzt habe.

Verwandte Themen