加载.jrxml时出现IllegalAccessException

时间:2017-04-25 13:51:26

标签: java eclipse exception jasper-reports illegalaccessexception

我试图修复在尝试将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

这是导致该execption的代码:

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

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

我已经在我的构建路径中添加了多个org.openide-,因为我有一个&#34; ClassNotFoundException&#34;,也许这就是问题的来源?

我已经在某处读过这个问题可能来自与JDK 8的jasperreport兼容性问题,但奇怪的是代码在从Eclipse运行时有效,只有在作为可运行的jar文件运行时抛出异常。 这个项目并不年轻,可能有2年,直到现在,该项目运行得非常完美(正如我所听到的)。

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

1 个答案:

答案 0 :(得分:0)

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

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>,我们能够解决问题。

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