launch4j:java.lang.OutOfMemoryError:超出了GC开销限制

问题描述 投票:0回答:1

我在我的Java项目中添加了poi-4.1.1.jar和所有附带的库,用于读取.xlsm文件。修改代码后,我可以在Eclipse中编译并运行它,而不会出现任何问题。

我导出>可运行的JAR文件>将所需的库提取到生成的JAR中;得到一个jar文件。然后使用launch4j制作了一个exe文件,并测试了包装程序,但当读取.xlsm文件时它不起作用(请参阅日志)

使用命令行java -jar foo.jar启动jar文件非常有效

我不使用Maven或蚂蚁。

我已经搜索了很长时间,对此错误有几个问题,但没有任何帮助。.xls和.xlsm文件的数据量相同。使用较旧的Poi库生成exe多次工作

Executing: D:\foo.exe
log4j:WARN No appenders could be found for logger (bar).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "Thread-5" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3044)
    at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3065)
    at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3216)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3422)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1272)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1259)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
    at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
    at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:226)
    at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:218)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:448)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:413)
    at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:282)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:303)
    at doImport(ImporterMain.java:249)
    at ImporterMain.run(ImporterMain.java:211)
    at java.lang.Thread.run(Unknown Source)
  • 我必须遍历代码并删除注释或未使用的代码吗?
  • 我在哪里可以看到GC限制是什么?
  • 我可以在哪里适应它?
  • 关于log4j警告是什么?如何附加记录器?

感谢给菜鸟Java程序员的建议

干杯,

java eclipse log4j launch4j xlsm
1个回答
0
投票

我终于可以解决它。

我为我的launch4j-application使用配置文件,因为每次生成exe时都具有相同的配置。我错过了,在launch4j的“ JRE”标签中,垃圾收集器被定义为-Xmx300m。

将垃圾收集器增加到-Xmx1g解决了该问题,我的exe现在可以正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.