我一直在尝试将图像资源显示在我正在开发的GUI上,但是我很难让它们显示出来。我遇到了其他关于加载资源的问题,例如java-swing-displaying-images-from-within-a-jar和images-will-not-work-in-a-jar-file,但它们对我不起作用。
我的问题似乎与第一个链接相同,在Eclipse中运行时图像出现,在使用Jars从命令行运行时图像不会出现。然而,这些问题的解决方案并没有使图像出现。
我检索资源的代码如下:
一条打印语句表明已找到资源,因为
我被难住了。我已经花了几个小时试图解决这个问题,但还需要帮助。有什么想法吗?
FYI:我不认为这很重要,但我正在使用Flamingo作为我的GUI。
编辑:按照Stefan的请求
更新:
当我使用Eclipse创建Jar并从命令行运行时,图像资源会正确显示。但是当我使用Gradle创建Jar时,图像不会显示。因此,在生成Jars时有些不同的事情被做了,这使得通过Eclipse Jar可以正确访问图像资源,而不是Gradle Jar。我在Gradle论坛上就这个问题提出了一个问题。
我的问题似乎与第一个链接相同,在Eclipse中运行时图像出现,在使用Jars从命令行运行时图像不会出现。然而,这些问题的解决方案并没有使图像出现。
我检索资源的代码如下:
public class R {
public static final String resourcePackage = "path/to/image/package";
/**
* Returns the resource string that refers to the <code>resource</code> file
* in the <code>path.to.image.package.png</code> package.
*
* @param resource
* the file in the <code>png</code> package
* @return the full resource string
*/
public static String png(String resource) {
return String.format("%s/png/%s", resourcePackage, resource);
}
public static ResizableIcon resizableIcon(String resource) {
return ImageWrapperResizableIcon.getIcon(R.class.getClassLoader()
.getResourceAsStream(resource), new Dimension(48, 48));
}
}
我在生成GUI时调用它
JCommandButton connect = new JCommandButton(i18ln.getString("ports"),
R.resizableIcon(R.png("serial-port-32x32.png")));
一条打印语句表明已找到资源,因为
R.class.getClassLoader().getResourceAsStream
返回sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream
的实例。我被难住了。我已经花了几个小时试图解决这个问题,但还需要帮助。有什么想法吗?
FYI:我不认为这很重要,但我正在使用Flamingo作为我的GUI。
编辑:按照Stefan的请求
src / main / java / com.company.project(包) R.java MyGui.java 资源 / com.company.project(包) .png(包) serial-port-32x32.png (更多图像) .i18ln(包) MyGui.properties至于更多代码,我不知道我能提供什么其他有益于这个问题的东西。我提供了检索资源以及如何使用该代码的所有代码。您是否在寻找特定的内容?
更新:
当我使用Eclipse创建Jar并从命令行运行时,图像资源会正确显示。但是当我使用Gradle创建Jar时,图像不会显示。因此,在生成Jars时有些不同的事情被做了,这使得通过Eclipse Jar可以正确访问图像资源,而不是Gradle Jar。我在Gradle论坛上就这个问题提出了一个问题。
Eclipse
时,您是否创建了一个“源文件夹”来放置图像?如果没有,请看看我的答案,它可能会指导您完成。 - nIcE cOw