Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jasperreports在报告()上报告引擎JRuntimeException。显示_Java_Jasper Reports_Dynamic Reports - Fatal编程技术网

Java Jasperreports在报告()上报告引擎JRuntimeException。显示

Java Jasperreports在报告()上报告引擎JRuntimeException。显示,java,jasper-reports,dynamic-reports,Java,Jasper Reports,Dynamic Reports,我正在使用DynamicReports和JasperReports创建一个java应用程序 尝试显示JasperReportBuilder时,出现以下错误: ... DEBUG DefaultExtensionsRegistry - Instantiating extensions registry for system.f ont.families using factory class net.sf.dynamicreports.jasper.base.JasperSyste

我正在使用DynamicReports和JasperReports创建一个java应用程序

尝试显示JasperReportBuilder时,出现以下错误:

...
    DEBUG DefaultExtensionsRegistry - Instantiating extensions registry for system.f
    ont.families using factory class net.sf.dynamicreports.jasper.base.JasperSystemF
    ontExtensionsRegistryFactory
    Exception in thread "AWT-EventQueue-0" Exception in thread "AWT-EventQueue-0"
    Exception: net.sf.jasperreports.engine.JRRuntimeException thrown from the UncaughtExceptionHandler in thread "AWT-EventQueue-0"
我真的在这里缺乏想法。我正在使用JDBC-ODBC桥来获取Access数据库(查询工作正常)。我的一段代码(基本上是动态创建报告和列):


整个应用程序非常大,所以我只放了一段代码(我稍微清理了一下stackoverflow)。如果您需要更多的代码,请告诉我。

我假设您也有类似的问题,就像我一样。我有两种部署(没有web场景):

  • 应用程序部署,所有相关JAR位于单独的文件中
  • 独立部署,将所有jar打包到一个jar中(“带依赖项的jar”)
  • 第二个场景执行不正确,并在您描述的同一位置以相同的错误中止

    原因是几个依赖的JasperReport jar在默认包级别的相同位置包含一个同名的属性文件:
    jasperreports\u extension.properties

    在自包含JAR场景中,它们相互覆盖。最后,只有一个
    jasperreports\u extension.properties
    ,因此工作的jasperreports缺少一些键值对

    解决方法:

    收集所有
    jasperreports\u extension.properties
    文件,并将其内容聚合为一个
    jasperreports\u extension.properties
    。确保您的部署获得此特殊文件,而不是原始文件。我在以下依赖工件中发现重复的
    jasperreports\u extension.properties
    文件:

    • jasperreports-6.2.2.jar
    • jasperreports-fonts-6.0.0.jar
    • dynamicreports-core-4.1.1.jar
    • dynamicreports-googlecharts-4.1.1.jar

    是否将所有依赖项部署到一个JAR中?我担心jasperreports_extension.properties位于同一位置的多个JAR中,如果您将所有这些JAR合并到一个JAR中,那么该属性文件将被覆盖。这意味着缺少某些属性。看:这对我很有效。在我使用服务器作为库的项目中,我将Jasper的属性与我的属性连接起来,然后在我使用库的项目(不是web)中,我使用依赖项构建了jar,它工作得非常好。
    JasperReportBuilder report = report();
                try{
                    report.setTemplate(Templates.reportTemplate);
                    StyleBuilder titleStyle = stl.style(boldCenteredStyle)
                            .setVerticalAlignment(VerticalAlignment.MIDDLE)
                            .setFontSize(15);
    
                    report.title(cmp.horizontalList().add(cmp.image("resources/icon.jpg").setFixedDimension(80, 80)
                        , cmp.text("Gestion de rapports").setStyle(titleStyle)
                        , cmp.text(rapportSelect.getNomListe()).setStyle(titleStyle).setHorizontalAlignment(HorizontalAlignment.RIGHT))
                            .newRow().add(cmp.filler().setStyle(stl.style().setTopBorder(stl.pen2Point())).setFixedHeight(10)));
    
                    Iterator it = rapportSelect.getMappingColonnes().entrySet().iterator();
                    while (it.hasNext()) {
                        Map.Entry pair = (Map.Entry)it.next();
                        report.columns(col.column((String)pair.getKey(), (String)pair.getValue(), type.stringType()));
                    }
    
                    report.pageFooter(Templates.footerComponent);
    
                    String sqlQuery = rapportSelect.getSqlQuery() + " ";
    
                    Statement stmt = GestionDbAdapter.getInstance().get().createStatement();
                    ResultSet rs = stmt.executeQuery(sqlQuery);
                    report.setDataSource(rs);
    
                    report.show(false);