我有一个Java应用程序,我有一个用户手册,可供用户使用,这是我的程序的资源。
我的项目是构建与Maven,我有几个项目。在我的GUI项目中,我有userManual.pdf在以下路径:src 主要资源 userManual userManual.pdf
在Eclipse IDE下,我运行我的主项目,当我点击用户手册按钮时,PDF文件将被打开。但是,当我建立我的项目,我有一个内部运行时错误的选项面板:发生内部错误(文件:.userManualuserManual.pdf不存在)。应用程序很可能处于不适当的状态,因此将无法退出。
我的代码:File manual = new File(ManualBar.class.getClassLoader().getResource("./userManual/userManual.pdf").getPath());
try {
Desktop.getDesktop().open(manual);
} catch (IOException e1) {
JOptionPane.showInputDialog(null,
"The user manual is not available",
"User manual is missing",
JOptionPane.INFORMATION_MESSAGE);
}
我想我没有正确调用我的资源,或者它没有到正确的位置。
不能作为File
实例访问jar中的资源。它可以在IDE中工作,因为Eclipse将所有内容解包到临时文件夹中,因此资源是文件系统中的实际文件。然而,当包装在一个罐子里时,它就不再是File
了。
由于Desktop.open
方法需要File
对象,您需要获得资源的InputStream
,将其复制到临时文件夹中的File
并打开该新文件。
使用Java 7,它可以写成:
Path tempFile = Files.createTempFile(null, ".pdf");
try (InputStream is = getClass().getResourceAsStream("/userManual/userManual.pdf")) {
Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING);
}
Desktop.getDesktop().open(tempFile.toFile());