代码之家  ›  专栏  ›  技术社区  ›  akbiggs

图像在.jar文件中不起作用

  •  2
  • akbiggs  · 技术社区  · 16 年前

    当创建应用程序的JAR时,应用程序中的图像将不再出现。加载图像的代码示例如下:

    ImageIcon placeHolder = new ImageIcon("src\\Cards\\hidden.png");
    

    我们不知道为什么会这样。如果我们不将其压缩到JAR中,应用程序将按预期运行;作为JAR,图像将完全消失。我们还尝试使用URL而不是ImageIcons,但这只会导致程序根本不运行。

    有什么想法吗?

    编辑:我们把图像文件放在JAR文件的正确路径中,所以这不是问题所在。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Andrzej Doyle    16 年前

    检查API constructor 你在打电话。您传入的字符串是一个文件路径—当资源打包到JAR中时,文件系统中没有包含该映像的文件,因此您不能再使用此构造函数。

    相反,您需要使用类加载器从流中加载资源,并将其拉入字节数组:

    byte[] buffer = new byte[IMAGE_MAX_SIZE];
    InputStream imageStream = getClassLoader().getResourceAsStream("src\Cards\hidden.png");
    imageStream.read(buffer, 0, IMAGE_MAX_SIZE);
    ImageIcon placeHolder = new ImageIcon(buffer);
    

    当然,需要更多的异常和边缘案例处理,但这就是它的要点。

        2
  •  2
  •   matt b    16 年前

    您应该从类路径加载资源,如下所示:

     InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("Cards/hidden.png")
    

    当然,这假定当您创建JAR时,实际上是将图像文件放入其中。

    还有一种方法 getting the resource as a URL .

        3
  •  1
  •   Esko    16 年前

    问题 :文件夹是否 src 在罐子里?

    小费 :您可以用任何支持zip的解包程序打开.jar以查看其内容。

    回答 :引用资源的方式不正确,应执行以下操作 getClass().getClassLoader().getResource("Cards/hidden.png") 相反。