报告不会从netbeans JasperReports加载

时间:2012-01-28 07:25:49

标签: java netbeans jasper-reports ireport

所有读过这篇文章的人都欢迎你。

我一直在墙上和桌子上猛击头几天......我正在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的源代码,但是效果更差......

你能提供的任何帮助我都会非常感激......

3 个答案:

答案 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中。

我们已将其删除,并且没有任何错误或警告。