Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Eclipse中导出JAR文件并引用文件_Eclipse_Image_Jar_Export - Fatal编程技术网

在Eclipse中导出JAR文件并引用文件

在Eclipse中导出JAR文件并引用文件,eclipse,image,jar,export,Eclipse,Image,Jar,Export,我有一个项目的图像存储为一个标志,我希望使用 URL logoPath = new MainApplication().getClass().getClassLoader().getResource("img/logo.jpg"); 使用该方法,我获取文件的URL并将其转换为字符串。然后,我必须将其子串为5,以摆脱这个输出“file:/C:/Users/Stephen/git/ILLA/PoC/bin/img/logo.jpg” 然而,当我将其导出为jar并运行它时,我遇到了麻烦。URL现在显

我有一个项目的图像存储为一个标志,我希望使用

URL logoPath = new MainApplication().getClass().getClassLoader().getResource("img/logo.jpg");
使用该方法,我获取文件的URL并将其转换为字符串。然后,我必须将其子串为5,以摆脱这个输出“file:/C:/Users/Stephen/git/ILLA/PoC/bin/img/logo.jpg”

然而,当我将其导出为jar并运行它时,我遇到了麻烦。URL现在显示为/ILLA.jar!/我的图像是空白的。我有一种直觉,它会绊倒我,那么我该如何解决这个问题呢

干杯,你就快到了

jar中的图像被视为资源。您需要使用类路径引用它们 只需使用getClass()。getResource:类似于:

getClass().getResource(“/images/logo.jpg”); 其中“images”是jar文件中的一个包,路径如上所示

请参阅调用中的前导/行-这将有助于正确访问路径(使用绝对而不是相对)。只需确保路径正确即可

另见:

请参见此处:


注意,似乎您需要在存档中使用一个资源流。

好的,那么当我将它引用到ImageLabel(它接收一个字符串,它是文件的绝对路径)时,我是否应该在开始时使用子字符串删除“jar:file:/?我仍然遇到同样的问题,在Eclipse中工作正常,但在将其导出为Jar文件后出现问题。是的,不需要使用“Jar:file://”-只需将其视为包含资源的包的路径即可。因此,当您打包jar时,如果它包含/images/logo.jpg,那么就很好了。当我将其作为jar文件运行时,我得到以下路径,“C:/Users/Stephen/workspace/ILLA.jar!/img/logo.jpg!”这正常吗?虽然这是正常的,但通常不会以这种方式使用URL。您打算在哪里使用URL?通常,它会被传递到其他API(如ImageIcon)中,suchI会将它与一个自定义类一起使用,该类接受一个字符串参数,该参数应该是文件的位置。显然,处理这条路径存在一些问题。或者,如果允许将ImageIcon添加到JFrame中,我可以使用它。请看,我的图像文件是从字符串而不是InputStream读取的。它实际上只是在寻找图像的路径。
String imgName = "/resources/images/image.jpg";
InputStream in = getClass().getResourceAsStream(imgName);
ImageIcon img = new ImageIcon(ImageIO.read(in));