我正在使用Netbeans创建Java应用程序。在“帮助”菜单项中,我需要打开PDF文件。当我通过Netbeans运行应用程序时,文档打开,但是在通过jar文件打开时,它没有打开。有什么可以做的吗?
m_aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Runtime rt = Runtime.getRuntime();
URL link2=getClass().getResource("/newpkg/Documentation.pdf");
String link=link2.toString();
link=link.substring(6);
System.out.println(link);
System.out.println(link2);
String link3="E:/new/build/classes/newpkg/Documentation.pdf";
try {
Process proc = rt.exec("rundll32.exe url.dll,FileProtocolHandler " + link3);
} catch (IOException ex) {
Logger.getLogger(Menubar1.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
两个输出如下:
E:/new/build/classes/newpkg/Documentation.pdf
file:/E:/new/build/classes/newpkg/Documentation.pdf
考虑上面的代码片段。在打印“链接”时,我们可以看到它与硬编码的“link3”完全相同。在使用硬编码的“link3”时,PDF文件将从jar应用程序中打开。但是当我们使用链接时,虽然它与'link3'完全相同,但PDF不会打开。
答案 0 :(得分:0)
这很可能与错误的PDF资源加载有关。在IDE中,您可以将PDF文件作为项目结构的一部分或使用直接指定的相对路径。当打包的应用程序正在运行时,它看不到该资源。
编辑: 您的代码显示了我所描述的问题。可以使用以下方法来正确识别资源路径。
public static URL getURL(final String pathAndFileName) {
return Thread.currentThread().getContextClassLoader().getResource(pathAndFileName);
}
请参阅this问题,这可能会提供更多信息。
答案 1 :(得分:0)
试试这个:
m_aboutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
URL link2=Menubar1.class.getResource("/newpkg/Documentation.pdf");
String link=link2.toString();
link=link.substring(6);
System.out.println(link);
File file=new File(link);
System.out.println(file);
try {
desktop.open(file);
} catch (IOException ex) {
Logger.getLogger(Menubar1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});