我想在 Eclipse 中将图像打包为可执行的 .jar 文件,但即使在存储它们并链接到它们之后,它们似乎也没有显示。我正在尝试关注this guide因为它似乎最接近我想做的事情。
根据我的理解,我需要从 InputStream 中将 4 个图像文件中的每一个作为 BufferredImage 读取,然后需要将它们更改回常规图像,以便它们在 JavaFX 中正常工作。我尝试了很多变体,但是这个似乎效果最好的一个是给了我一个 java.lang.reflect.InitationTargetException ,所以它甚至不能在 Eclipse 中正常工作。我知道有类似的问题,但似乎没有一个具体回答我的问题(大多数涉及 ImageIcons 和 JFrames),或者我无法将它们正确地拼凑在一起。
public class CardPane extends Pane
{
private static Image[] images;
private static BufferedImage img1;
private static BufferedImage img2;
private static BufferedImage img3;
private static BufferedImage img4;
private static Image image1;
private static Image image2;
private static Image image3;
private static Image image4;
static
{
try {
img1 = ImageIO.read(ResourceLoader.getImage("green-club-100.png"));
img2 = ImageIO.read(ResourceLoader.getImage("pink-heart-100.png"));
img3 = ImageIO.read(ResourceLoader.getImage("black-spade-100.png"));
img4 = ImageIO.read(ResourceLoader.getImage("blue-diamond-100.png"));
}
catch (IOException e) {
e.printStackTrace();
}
image1 = SwingFXUtils.toFXImage(img1,null);
image2 = SwingFXUtils.toFXImage(img2,null);
image3 = SwingFXUtils.toFXImage(img3,null);
image4 = SwingFXUtils.toFXImage(img4,null);
images[0] = image1;
images[1] = image2;
images[2] = image3;
images[3] = image4;
}
}
final public class ResourceLoader {
public static InputStream getImage(String path) {
InputStream input = ResourceLoader.class.getResourceAsStream(path);
if (input == null)
input = ResourceLoader.class.getResourceAsStream("/" + path);
return input;
}
}
Here is what it looks like on the file explorer.我配置了构建路径,将 res 文件夹标记为源文件夹,我相信这是我应该做的。
是否有快速修复方法可以消除调用错误,或者我对整个事情的处理完全错误吗?抱歉,如果问题令人困惑或看起来很愚蠢,我对编码和这个网站还很陌生。任何帮助将不胜感激,如果需要查看更多代码,我将很乐意分享!谢谢!
编辑:我根据建议尝试了不同的方法,但似乎都不起作用。它们在 Eclipse 和我的计算机上运行良好,但是当在其他设备上打开 jar 时,图像不会显示。 这是第一个带有资源加载器的
private static Image[] images = new Image[4];
private static Image image1 = new Image(ResourceLoader.getImage("green-club-100.png"));
private static Image image2 = new Image(ResourceLoader.getImage("pink-heart-100.png"));
private static Image image3 = new Image(ResourceLoader.getImage("black-spade-100.png"));
private static Image image4 = new Image(ResourceLoader.getImage("blue-diamond-100.png"));
static
{
images[0] = image1;
images[1] = image2;
images[2] = image3;
images[3] = image4;
}
第二个没有,使用 URL,如 example 2
public static URL url1 = CardGridPaneTest.class.getResource("green-club-100.png");
public static URL url2 = CardGridPaneTest.class.getResource("pink-heart-100.png");
public static URL url3 = CardGridPaneTest.class.getResource("black-spade-100.png");
public static URL url4 = CardGridPaneTest.class.getResource("blue-diamond-100.png");
public static Image image1 = new Image(url1.toString());
public static Image image2 = new Image(url2.toString());
public static Image image3 = new Image(url3.toString());
public static Image image4 = new Image(url4.toString());
public static Image[] images = new Image[4];
static {
images[0] = image1;
images[1] = image2;
images[2] = image3;
images[3] = image4;
}
最佳答案
代码没问题。您收到该异常是因为您没有初始化图像数组。将图像定义为;
Image[] images = new Image[4].
关于java - 如何在 .jar 中包含和访问图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421713/