【问题标题】:Can't open a PDF after a maven buildMaven构建后无法打开PDF
【发布时间】:2015-10-01 08:45:14
【问题描述】:

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

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

在 Eclipse IDE 下,我运行我的主项目,当我单击用户手册按钮时,PDF 文件将被打开。但是当我构建我的项目时,我在选项窗格中有一个内部运行时错误: 发生内部错误(文件:.\userManual\userManual.pdf 不存在。)。 应用程序很可能处于不适当的状态,因此将 nox 退出。

我的代码:

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);
}

我认为我没有正确调用我的资源或者它不在正确的位置。

【问题讨论】:

  • 尝试更改为/userManual/userManual.pdf(不带初始点)
  • 这个我已经测试过了,还是不行。
  • 您是否通过 pom 文件中的配置过滤资源?
  • 我不知道。我是 Maven 的初学者

标签: java eclipse swing maven stream


【解决方案1】:

您不能以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());

【讨论】:

  • 当我在 Eclipse IDE 中运行时出现异常:java.nio.file.FileAlreadyExistsException: C:\Users\fred37b\AppData\Local\Temp\1488624516076161268.tmp 我现在尝试在 maven 中构建
  • @Fred37b 查看我的编辑,您可以添加 StandardCopyOption.REPLACE_EXISTING 但我认为没有必要,因为每次都会创建一个新的临时文件
  • 即使使用 Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING),我也会在 tempFile.toFile() 上抛出 IOException
  • toFile 方法不会抛出 IOException 所以不清楚你在说什么。
  • 对不起,Desktop.getDesktop().open(tempFile.toFile());抛出 IOException
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多