4

.xlsx ファイルを読み取り、コンテンツをユーザーに表示するアプリケーションがあります。アプリケーションは Windows 環境で正常に動作します。

この Web アプリの .war ファイルを ubuntu サーバーの tomcat6 にデプロイしました。サーバー上の .xlsx ファイルもコピーしました。

コード内のファイルのパスは正しいです。

しかし、ライン

FileInputStream file = new FileInputStream(new File(FileName));
XSSFWorkbook workbook = new XSSFWorkbook(file);

エラーを与える

java.lang.reflect.InvocationTargetException
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403)
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207)
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107)

変数 FileName にサーバー上のファイルの正しいパスとファイル名が含まれていることを確認しました (/usr/local/Metrics/MetricFiles/FY2013_Q2_GIT_Review_Metrics_by_LSS-GC.xlsx)

ubunut サーバーは VM であるため、WinSCP を使用して .xlsx ファイルをコピーしました。ファイルのサイズも適切です。

Linux プラットフォームでこのエラーが発生するのはなぜですか?

追加の例外トレースの追加

Caused by: java.lang.reflect.InvocationTargetException at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) ... 68 more 
Caused by: java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:2694) at java.lang.String.<init>(String.java:203) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseCdataLiteral(PiccoloLexer.java:3027) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseQuotedTagValue(PiccoloLexer.java:2936) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1754) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714) at 
org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) at 
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) at 
org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument$Factory.parse(Unknown Source) at 
org.apache.poi.xssf.model.StylesTable.readFrom(StylesTable.java:121) at 
org.apache.poi.xssf.model.StylesTable.<init>(StylesTable.java:92) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) at 
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) at 
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207) at 
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at 
java.lang.reflect.Method.invoke(Method.java:601) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
4

4 に答える 4

2

コメントを回答に昇格しています...

何が壊れたのか、その理由を説明するスタックトレースの重要な部分は次のとおりです。

Caused by: java.lang.OutOfMemoryError: Java heap space at 
java.util.Arrays.copyOfRange(Arrays.java:2694)

これは、ファイルの処理に伴うすべてのデータを格納するのに十分なメモリが Java に割り当てられていないことを示しています。

JVM ヒープ サイズの増加についてサポートが必要な場合は、この前の質問またはこの質問を確認することをお勧めします。どちらもすべてを説明しています。

于 2013-05-31T12:45:12.373 に答える
1

プロジェクトに挿入org.apache.xmlbeansしました。それは役に立ちました。

于 2015-05-12T15:26:52.270 に答える