加载 .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>
,我们能够解决问题。
感谢您的投入,我很感激。
我正在尝试修复在尝试将 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>
,我们能够解决问题。
感谢您的投入,我很感激。