0

我正在尝试修复尝试将碧玉报告导出为 pdf 时出现的错误,但是在使用 JRXmlLoader 加载 .jrxml 文件时,代码会引发此异常:

Caused by: java.lang.IllegalAccessException: Class org.openide.util.WeakListenerImpl$ProxyListener can not access a member of class org.openide.filesystems.$Proxy0 with modifiers "public"
    at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source)
    at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openide.util.WeakListenerImpl$ProxyListener.<init>(WeakListenerImpl.java:413)
    ... 100 more

这是似乎导致该执行的代码:

    JasperDesign jasperDesign = JRXmlLoader.load("C:/jrxmls/myreport.jrxml"); //< this line
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, resultSetDataSource);

由于这不是我的代码,而且我真的不知道如何使用 jasper,因此我提前为无法为这个问题提供更多上下文而道歉。

我在构建路径中添加了多个 org.openide-,因为我有大量的“ClassNotFoundException”,也许这就是问题所在?

我在某处读到问题可能来自 jasperreport 与 JDK 8 的兼容性问题,但奇怪的是代码在从 Eclipse 运行时有效,只有在作为可运行的 jar 文件运行时才会引发异常。这个程序并不年轻,它可能有 2 年的时间,直到现在,程序运行完美(正如我听说的那样)。

编辑:好的,所以,我尝试使用 1.7 版的 jre 运行程序。不幸的是,由于它依赖于在 1.8 上运行的其他程序,我无法测试这个解决方案。

4

1 回答 1

0

好的,我发现了问题所在。我认为这是一些缺少 jars 的问题,但它实际上是一个完全不同的错误。我们得到的第一个例外是这个:

org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 16; Error at line 12 char 16: null

查看堆栈跟踪时,它显示了这一点:

Caused by: java.lang.ClassNotFoundException: org.openide.util.Lookup
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 74 more

这就是为什么我认为该程序缺少一些依赖项。

但问题是,在 .jrxml 文件中,我们添加了一个<queryString>...</queryString>仅在测试文档时使用的查询,并且在代码中,我们想用另一个查询替换这个查询,这导致抛出这个异常。

通过删除整体<queryString>...</queryString>,我们能够解决问题。

感谢您的输入,我很感激。

于 2017-04-28T09:17:06.627 回答