gpt4 book ai didi

java - 打开资源文件夹中存储的 PDF 文件会引发异常

转载 作者:行者123 更新时间:2023-12-02 03:27:36 25 4
gpt4 key购买 nike

我编写了一个程序,其中应在操作事件上打开 pdf 文件(您可以查看下面的代码)。

menuElementHilfe.addActionListener(new ActionListener() {   
public void actionPerformed(ActionEvent arg0) {
File hilfe = new File ("src\\resources\\Hilfe.pdf");
try {
java.awt.Desktop.getDesktop().open(hilfe);
} catch (IOException e) {
e.printStackTrace();
}
}
});

如果我通过 Eclipse 执行程序,一切正常,但在导出为可运行的 jar 后,我得到以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The file: src\resources\Hilfe.pdf doesn't exist.

欢迎任何反馈

最佳答案

您检索资源的方式可能是问题所在。试试这个:

menuElementHilfe.addActionListener(new ActionListener() {   
public void actionPerformed(ActionEvent arg0) {
File hilfe = new File(getClass().getResource("/resources/Hilfe.pdf").getFile());
try {
java.awt.Desktop.getDesktop().open(hilfe);
} catch (IOException e) {
e.printStackTrace();
}
}
});

在 Eclipse 中运行时,您的目标是构建路径中的一个文件。从 JAR/WAR 运行时,URL 不同,看起来像 "jar:file:/your-path/your-jar.jar!/Hilfe.pdf" ,这不是您在调用时设置的new File(...) 因此,要获取内部资源的正确 URL,您必须根据需要使用 getResource 或 getResourceAsStream 等方法。

查看以下说明以获取更多信息:) https://docs.oracle.com/javase/8/docs/technotes/guides/lang/resources.html

[编辑]

我假设您正在开发一些 Swing 应用程序,但我不知道您是否意识到在 AWT-EventQueue 线程中执行类似的任务会卡住您的 UI。为了防止这种情况,您必须在另一个线程中运行与 UI 无关的内容。

This is made using SwingUtilities.invokeLater (Java 5 and prior) method and/or the SwingWorker class (since Java 6).

正如本文中提到的answer

您应该将之前的解决方案放在类似的内容中:

 SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Your UI unrelated code here
}
});

关于java - 打开资源文件夹中存储的 PDF 文件会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com