加载 .jrxml 时出现 IllegalAccessException

IllegalAccessException when loading .jrxml

我正在尝试修复在尝试将 jasper 报告导出为 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 运行ning 时有效,例外是仅在 运行ning 作为 运行nable jar 文件时抛出。 这个程序不年轻了,可能有2年了,到现在为止,这个程序运行很完美(听说)。

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

好的,我发现问题出在哪里了。 我认为这是一些缺少 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>,我们能够解决问题。

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