[英]JasperReport: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
[英]Jaspersoft Report - net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression
我正在使用TIBCO Jaspersoft Studio-6.1.1.final。
我有一個報告,其中將Java jar文件添加到scriptlet中以讀取doc文件。
當我在Jasper報告中運行時,出現以下錯誤。
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $P{Read_DocFile_SCRIPTLET}.readline()
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:511)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$20(ReportControler.java:486)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler$5.run(ReportControler.java:367)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $P{Read_DocFile_SCRIPTLET}.readline()
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:291)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:618)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:586)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1015)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:568)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:552)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:281)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:504)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2029)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:262)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:122)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:555)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:119)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoSuchMethodError: org.apache.poi.POIDocument: method <init>()V not found
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:144)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:133)
at com.Read_DocFile.readline(Read_DocFile.java:25)
at Blank_
具有兩個外部jar文件的Java文件,我將其添加到lib文件夾中並在Eclipse中生成了jar文件。
下面添加了Java代碼
package com;
import java.io.*;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class ReadDocFile extends JRDefaultScriptlet {
public String readline() throws JRScriptletException {
File file = null;
WordExtractor extractor = null;
try {
file = new File("C:\\Tempp\\RTF_view.doc");
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
HWPFDocument document = new HWPFDocument(fis);
extractor = new WordExtractor(document);
String[] fileData = extractor.getParagraphText();
for (int i = 0; i < fileData.length; i++) {
if (fileData[i] != null)
return fileData[i];
}
} catch (Exception exep) {
exep.printStackTrace();
}
return "Hello! I'm the report's scriptlet object.";
}
}
答案在您的堆棧跟蹤中
com.Read_DocFile.readline(Read_DocFile.java:25)
java.lang.NoSuchMethodError: org.apache.poi.POIDocument: method <init>()V not found
如果您的IDE中沒有錯誤,請確保在運行報表的地方部署了相同版本的類庫(POI)。
問題:可能是不同版本的POI庫(或類路徑中具有不同版本的多個POI)
解決方案:使用相同版本
加載POI類到底在哪里?
ClassLoader classloader =
org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
"org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.