我刚试过Jasper Report,我正在关注this site
的教程我还下载了示例源,然后运行它并没有出错。但是当我使用iReport
创建自己的报告时,编译它,并将.jasper
文件添加到我的项目中。我运行程序时有exception
:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray
at report2_1343895135169_749208.$createCallSiteArray(calculator_report2_1343895135169_749208)
at report2_1343895135169_749208.$getCallSiteArray(calculator_report2_1343895135169_749208)
at report2_1343895135169_749208.<init>(calculator_report2_1343895135169_749208)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(JRAbstractJavaCompiler.java:112)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(JRAbstractCompiler.java:333)
at net.sf.jasperreports.engine.JasperCompileManager.getEvaluator(JasperCompileManager.java:265)
at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:457)
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:379)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:634)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:956)
at View.MainGUI.btnExportActionPerformed(MainGUI.java:871)
at View.MainGUI.access$800(MainGUI.java:50)
at View.MainGUI$10.actionPerformed(MainGUI.java:541)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.callsite.CallSiteArray
at java.lang.ClassLoader.findClass(ClassLoader.java:359)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 50 more
这里是我用于显示报告的按钮操作(这只是示例,报告只包含一个带参数的文本:outputText):
Map params = new HashMap();
params.put("outputText", "Hello world");
try {
JasperPrint printer = JasperFillManager.fillReport(getClass().getResourceAsStream("report2.jasper"), params, new JREmptyDataSource());
JasperViewer jv = new JasperViewer(printer);
jv.show();
} catch (JRException ex) {
ex.printStackTrace();
}
如果是dependency
问题,我已经将所有必需的jar导入到我的项目中,当我使用该教程中的.jasper
文件时没有问题,是不是因为{的iReport
版本不同{1}}或者其他?
答案 0 :(得分:17)
或者,您可以更改.jrxml文件,查找
language="groovy"
并将其更改为
language="java"
答案 1 :(得分:8)
可能是因为版本不匹配。 如果你想知道你需要哪个版本的Groovy,你可以看一下Jasper的Maven资源库:
http://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports/4.6.0
从这里您可以看到 Jasper 4.6.0
需要 Groovy 1.7.5答案 2 :(得分:3)
使用CallSiteArray类需要额外的Jar包。
答案 3 :(得分:0)
我在使用Jasper iReport Tool 5.6.0时遇到了同样的问题我将语言作为Java,而正确的jasper报告库我将其归类为iReport Tool 5.1.0,它的工作方式就像魅力一样...希望状态仍然存在所以..
答案 4 :(得分:0)
无需更改库,如果是Ireport 5.X版本,您可以在主报表属性的语言部分更改它,只需从groovy更改为java并且报告不会出现任何错误。
答案 5 :(得分:0)
简单的回答
<强>步骤进行:强>
1 从报告检查器中选择您的根文件夹,即report1.jsxml ( Windows-&gt;报告检查器) 2 转到属性标签,然后点击语言标签,然后选择JAVA
编译并预览您的应用程序...
对subReports执行相同操作