Can';t通过JRXmlLoader:getting java.io.FileNotFoundException加载位于jar文件中的jrxml

Can';t通过JRXmlLoader:getting java.io.FileNotFoundException加载位于jar文件中的jrxml,java,jasper-reports,Java,Jasper Reports,我正在Java应用程序中使用JasperReports 我有一个名为“reports”的包来存储生成的所有报告。以下是我在应用程序中调用jasper report的方式 JasperDesign jd = JRXmlLoader.load("C:\\Users\\Sandaru Weerathunga\\Desktop\\Dasatha Institute\\src\\reports\\teacherPay.jrxml"); 这起作用了。 我没有给出完整的路径,而是尝试: JasperDes

我正在Java应用程序中使用JasperReports

我有一个名为“reports”的包来存储生成的所有报告。以下是我在应用程序中调用jasper report的方式

JasperDesign jd  = JRXmlLoader.load("C:\\Users\\Sandaru Weerathunga\\Desktop\\Dasatha Institute\\src\\reports\\teacherPay.jrxml");
这起作用了。
我没有给出完整的路径,而是尝试:

JasperDesign jd  = JRXmlLoader.load("/reports/teacherPay.jrxml");
但这是在运行程序时显示错误:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: 
/reports/teacherPay.jrxml (The system cannot find the path specified)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:176)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156)

提供JRXmlLoader的完整路径是不合适的,因为如果要在其他计算机上运行此应用程序,则必须根据计算机路径更改所有编码。因此,请在这方面帮助我。

/reports/teacherPay.jrxml
是一个绝对文件路径,这意味着,转到当前驱动器的根目录,并在
reports
目录中找到文件
teacherPay.jrxml

如果我没看错你的问题,那不是你想要的

相反,尝试将报告作为资源加载(假设您声明它位于
包中

JasperDesign jd  = JRXmlLoader.load(getClass().getResource("/reports/teacherPay.jrxml"));
例如,如果报表未打包在应用程序上下文中,则需要使用相对路径

JasperDesign jd  = JRXmlLoader.load("reports/teacherPay.jrxml");
话虽如此。除非您在运行时进行动态更改,否则您不应该加载
jrxml
文件,而是应该预先编译该文件,并应加载
.jasper
文件。这样会更快,而且通常不太容易出错

JasperDesign jd  = JRXmlLoader.load(getClass().getResource("/reports/teacherPay.jrxml"));
这在一段时间内不起作用,因为
getResource()
返回
URL
。如果您的文件路径包含
它会像这样返回
%20”

"C:\\Users\\Sandaru Weerathunga\\Desktop\\Dasatha Institute\\src\\reports\\teacherPay.jrxml"
返回

"C:\\Users\\Sandaru%20Weerathunga\\Desktop\\Dasatha%20Institute\\src\\reports\\teacherPay.jrxml"
在这种情况下,您可以使用retuns
InputStream
getResourceAsStream()
方法。试试这个,这对我很有用

JasperReport jp = JasperCompileManager.compileReport(getClass().getResourceAsStream("/reports/teacherPay.jrxml"));

非常感谢您的帮助…JRXmlLoader.load(getClass().getResource(“/reports/teacherPay.jrxml”))不工作,但JRXmlLoader.load(getClass().getResourceAsStream(“/reports/teacherPay.jrxml”))工作正常..无论如何,再次感谢您..:)永远记不起它是否需要
URL
InputStream
-很高兴您能使用它