所有读过这篇文章的人都欢迎你。
我一直在墙上和桌子上猛击头几天......我正在netbeans项目中创建一份JasperReports的报告。我不知道发生了什么,但有一刻它正在工作,下一个我弹出2个WARNings,现在报告窗口(屏幕打印输出)和PDF打印输出将不会加载,除非代码是从开发环境中运行的。
以下是警告: log4j:WARN找不到logger(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory)的appender。 log4j:WARN请正确初始化log4j系统。
我用来编译报告的代码行抛出了警告:
JasperReport jasperReport = JasperCompileManager.compileReport("C:/Report/report1.jrxml");
用于编译和生成报告的整个代码块如下:
public void Print_File() {
try {
String parameter = LoadNum_Text.getText();
String RecordPath = "C:/Report/Created/LoadSheet/";
String name = RecordPath + parameter;
String destinationFile = name + ".pdf";
Map param = new HashMap();
param.put("Load_Number", parameter);
con = DriverManager.getConnection(host, uName, uPass);
String sql = "SELECT * FROM Load_Sheet";
JasperReport jasperReport = JasperCompileManager.compileReport("C:/Report/report1.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, con);
JasperExportManager.exportReportToPdfFile(jasperPrint, destinationFile);//export dynamic file name
//con.close();
try {
JasperViewer visor = new JasperViewer(jasperPrint, false);
visor.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
此外我以前的代码版本现在也有同样的问题,因为我已经尝试回滚到它们,我还尝试了旧版本的(以前是)工作的report1.jrxml文件。
我还尝试过另外一个运行其他MYSQL服务器的服务器,试着看看这是一个潜在的问题,但仍然有相同的最终结果。
我尝试过从IReport本身导入库(我用来生成报告的程序),但也无济于事。
我还下载并试用了JasperReport4.5.0以及3.0.1的源代码,但是效果更差......
你能提供的任何帮助我都会非常感激......
答案 0 :(得分:0)
在类路径中添加以下log4j.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="CA" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
</layout>
</appender>
<appender name="FA" class="org.apache.log4j.FileAppender">
<param name="File" value="myReport.log"/>
<param name="Threshold" value="ALL"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="CA" />
<appender-ref ref="FA" />
</root>
</log4j:configuration>
这应解决log4j.xml WARN,并为您提供有关发生情况的更多信息(查看myReport.log并最终在此处发布,如果您仍有问题)。
嗨,Erik,我看了myReport.log,发现以下(所有类似的)错误:
5072 [AWT-EventQueue-0] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'titleBaseFontSize': Invocation of init method failed; nested exception is
java.lang.NoSuchFieldException: TITLE_BASEFONT_SIZE
5315 [AWT-EventQueue-0] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'subtitleBaseFontSize': Invocation of init method failed; nested exception is
java.lang.NoSuchFieldException: SUBTITLE_BASEFONT_SIZE
5610 [AWT-EventQueue-0] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'legendBaseFontSize': Invocation of init method failed; nested exception is java.lang.NoSuchFieldException: LEGEND_BASEFONT_SIZE
5991 [AWT-EventQueue-0] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'axisLabelFontSize': Invocation of init method failed; nested exception is java.lang.NoSuchFieldException: AXIS_LABEL_FONT_SIZE
6041 [AWT-EventQueue-0] DEBUG org.springframework.beans.factory.xml.XmlBeanFactory - Ignoring bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'axisTickLabelFontSize': Invocation of init method failed; nested exception is java.lang.NoSuchFieldException: AXIS_TICK_LABEL_FONT_SIZE
.....
.....
.....
所以很多 java.lang.NoSuchFieldException (这意味着类的Java运行时调用找不到方法,如果jasper报表设计器版本与运行时不同,这是很常见的)。 我怀疑dev env与你的运行时环境不同,所以请仔细检查两个环境中的jasper报告版本是否相同。
你可以做的另一个测试是使用另一个env的myReport.log来面对dev env的myReport.log,看看你是否有 java.lang.NoSuchFieldException 异常。 (一般来说有什么不同)。 如果您发现它们不同(例如您没有捕获 java.lang.NoSuchFieldException ),那么嫌疑人几乎就是事实。
问候
答案 1 :(得分:0)
添加
spring.jar file
spring-core-3.2.4.RELEASE
swingx-2007_10_07
在发出像---
之类的警告后,它会正常工作log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
log4j:WARN Please initialize the log4j system properly.
答案 2 :(得分:0)
我们在通过Jasper导出报告时遇到了类似的问题。在我们的应用程序中,我们有spring-4.3.2.jar版本和jasperreports-5.6.1.jar。
解决方案只是从chartConstantsBean.xml中删除这些常量,无论如何都无法使用它们。
chartConstantsBean.xml位于jasperreports-chart-themes-5.0.0.jar中。
我们已将其删除,并且没有任何错误或警告。