我正在尝试修复一个错误,当试图将jasper报告导出为pdf时,但是当使用JRXmlLoader加载一个JRXmlLoader文件时,代码会抛出这个异常:
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文件运行时才会引发异常。这个程序并不年轻,它可能有两年的时间,直到现在,这个程序运行得很完美(正如我所听到的)。
编辑:好的,我试着使用jre的1.7版运行这个程序。不幸的是,由于它依赖于运行在1.8上的其他程序,所以我无法测试这个解决方案。
发布于 2017-04-28 09:17:06
好吧,我发现问题出在哪里了。我认为这是一些缺少的罐子问题,但实际上是一个完全不同的错误。我们得到的第一个例外是这个
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>,我们能够解决问题。
谢谢你的帮助,我很感激。
https://stackoverflow.com/questions/43612608
复制相似问题