我正在从 swing 应用程序创建一个 jasper 报告。当设置绝对路径但不为相对路径生成报告时,它工作正常。生成代码的java代码为
JasperDesign jd= JRXmlLoader.load("relative path");
String sql = "";
JRDesignQuery newQuery= new JRDesignQuery();
newQuery.setText(sql);
jd.setQuery(newQuery);
JasperReport JASP_REP= JasperCompileManager.compileReport(jd);
JasperPrint JASP_PRINT= JasperFillManager.fillReport(JASP_REP,null,conn);
JasperViewer.viewReport(JASP_PRINT,false);
每当我尝试使用绝对路径时,都会发生错误。数据源的 xml 代码是
<defaultValueExpression >
<![CDATA["reports/report1.jasper"]]>
</defaultValueExpression>
但它显示以下错误
java.io.FileNotFoundException: reports/report1.jasper (The system cannot find the path specified)
我收到了一些建议
http://forums.devshed.com/java-help-9/relative-path-for-subreport-in-jasperreport-309313.html
但没有人在这个场景中提供帮助。
最佳答案
如果您正在使用 Jasper
Swing
应用程序,那么最佳实践是路径必须是绝对的。只需将所有 .jrxml
文件编译为 .jasper
文件并始终加载已编译的 .jasper
文件。速度很快。
在应用程序外部创建诸如jaspers
、images
、styles
之类的文件夹。并创建system/environment
变量,如下所示。
JASPERDIR = "c:\\app\\jaspers";
STYLES = "c:\\app\\styles";
IMAGES="c:\\app\images";
现在在您的 swing 应用程序中使用 System.getenv()
方法,传递变量名称来读取路径。
这样每次你的swing应用程序都足够灵活。您可以随时更改 images
、styles
、.jasper
文件,而无需重新启动 swing 应用程序。
关于java - 如何设置 jasper 报告的相对类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16031148/