在maven构建后无法打开PDF

时间:2015-10-01 08:45:15

标签: java eclipse swing maven stream

我有一个Java应用程序,我有一个用户手册,可供用户使用,这是我程序的资源。

我的项目是用Maven构建的,我有几个项目。在我的GUI项目中,我在以下路径中有userManual.pdf: SRC \主\资源\用户手册\ userManual.pdf

在Eclipse IDE下,我运行我的主项目,当我点击用户手册按钮时,PDF文件将被打开。但是当我构建项目时,我在选项窗格中有一个内部运行时错误: 发生内部错误(文件:。\ userManual \ userManual.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);
}

我想我没有正确地调用我的资源,或者它没有到正确的位置。

1 个答案:

答案 0 :(得分:2)

您无法作为File实例访问jar中的资源。它在您的IDE中工作,因为Eclipse解压缩临时文件夹中的所有内容,因此资源是文件系统中的实际文件。但是,当打包在jar中时,它不再是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());