来自eclipse的可执行jar无法在包中使用图像......有时

executable jar from eclipse unable to use images within packages... sometimes

我写了一个 swing 应用程序,它在 eclipse 中运行良好,但是当我将它导出为可运行的 jar 时,应用程序的某些部分失败了,在处理图像时,例如这一行;

logo = getClass().getResource("/com/cogentautomation/logo.jpg").getPath();

eclipse 正在将图像打包在 com.cogentautomation 包中,我可以在 .jar 本身中看到它,我已经尝试了两种导出方法,提取所需的库和打包所需的库,有人说;

FileNotFoundException com\cogentautomation\logo.jpg

对方说;

FileNotFoundException file:\c:\documents\hs.jar!\com\cogentautomation\logo.jpg

我正在使用一个库来解析一个 PDF 文件,这是发生此错误的地方,但是它在 eclipse 中以及与磁盘上不是 java 资源的其他图像一起工作。

我已经阅读了有关该问题的其他主题,但似乎没有任何帮助。

编辑:解决评论中的问题,我需要一个 String 变量我正在使用的库需要一个字符串输入来读取图像;

import org.pdfclown.documents.contents.entities.Image;

Image image = Image.get(logo);

基于 org.pdfclown.documents.contents.entities.Image 的 JavaDocs,我 "guess" Image.get(String) 使用 String 作为构造函数的参数将调用转发给 Image.get(File)File

这不适用于基于 URL 的路径。相反,您需要关注 Image.get(IInputStream)(为什么这些 API 不能简单地使用现有的 :P)

所以,通过 API 挖掘更多 IInputStream 导致 org.pdfclown.bytes.Buffer,不完美,但它是 link。

您可以使用 Class#getStreamAsResource 并将其写入一个 ByteArrayOutputStream,然后可以给您一个 byte[],然后可以传递给 Image.get(IInputStream)