Java Can';不要在maven构建之后打开PDF

Java Can';不要在maven构建之后打开PDF,java,eclipse,swing,maven,stream,Java,Eclipse,Swing,Maven,Stream,我有一个Java应用程序和一本用户手册,可供用户使用,这是我程序的资源 我的项目是用Maven构建的,我有几个项目。在我的GUI项目中,userManual.pdf位于以下路径中: src\main\resources\userManual\userManual.pdf 在EclipseIDE下,我运行我的主项目,当我单击用户手册按钮时,PDF文件将被打开。但当我构建项目时,在选项窗格中出现内部运行时错误: 发生内部错误(文件:。\userManual\userManual.pdf不存在)。 应

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

我的项目是用Maven构建的,我有几个项目。在我的GUI项目中,userManual.pdf位于以下路径中: src\main\resources\userManual\userManual.pdf

在EclipseIDE下,我运行我的主项目,当我单击用户手册按钮时,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);
}

我认为我没有正确调用我的ressource,或者它没有正确的位置。

您不能将jar中的资源作为
文件
实例进行访问。它在IDE中工作,因为Eclipse将所有内容解压到一个临时文件夹中,因此资源是文件系统中的一个实际文件。但是,当打包到jar中时,它不再是
文件

由于该方法需要一个
文件
对象,因此需要获取资源的
输入流
,将其复制到临时文件夹中的
文件
,然后打开该新文件

使用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());

尝试更改为
/userManual/userManual.pdf
(没有初始点)我已经测试过了,但它不起作用。您是否根据pom文件中的配置筛选资源?我不知道。我是maven的初学者当我在EclipseIDE中运行时,我有一个例外:java.nio.file.filealreadyexistException:C:\Users\fred37b\AppData\Local\Temp\1488624516076161268.tmp我尝试在maven中内置now@Fred37b看我的编辑,您可以添加StandardCopyOption.REPLACE_EXISTING,但我认为没有必要,因为每次都会创建一个新的临时文件,即使有文件。copy(即tempFile,StandardCopyOption.REPLACE_EXISTING),它会在tempFile.toFile()上引发IOException
toFile
方法不会抛出
IOException
,因此不清楚您在说什么。对不起,行Desktop.getDesktop().open(tempFile.toFile());抛出IOException