图像不是在jar中显示而是在编译器中显示?

时间:2011-02-22 23:08:44

标签: java image jar

我知道,我知道,之前有人问过。但是我看过的每一个资源都使用了IconImages,而我只有普通的图像。

有不同的解决方案吗?请帮忙,因为我一直在研究,并试图解决这个问题几天没有进展。

Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");

编辑:如果我要确保jar不会压缩,并且我在jar中为图像创建了一个单独的目录并放入了正确的文件路径,那么这段代码是否有效?

6 个答案:

答案 0 :(得分:3)

Toolkit #getImage(String s)查找文件,您的图像可能在Jar中,现在是资源而不是文件。期待为此使用资源。

请注意,ImageIO.read(...)可以接受一个I​​nputStream参数,Class类有一个方法getResourceAsStream(...),它可以将资源放入ImageIO可以读取的Stream中。试一试。

另外,当您尝试自己正在做的事情时,是否收到任何错误消息?

答案 1 :(得分:1)

确保您知道当前目录是什么,以及它与jar中文件位置的关系。

以下是我将如何处理它。

1) Require there to be a file called "images.txt" in the directory with your jar (or bundle it into the jar.)
2) Make a file called "images.txt" with a format like `FLOOR:C:\\images\\floor.png`
3) Load this file into memory on load.
4) Load your images based on the entries in the file

如果在jar之外定义代码,这将为您提供更改图像而无需更改代码的优势:)

它没有加载,因为你没有在声明中放置图像的路径。它希望图像在jar的任何地方(注意那里没有目录)

您需要将文件名的定义卸载到文件中,或者至少保证文件的相对位置。

另一个好的选择是将图像放在jar本身中,比如在img目录中,并在那里引用它们。但随后对图像的更改需要一个新的jar,这可能不适合开发目的。

答案 2 :(得分:1)

getImage调用正在查看文件系统工作目录,而不是在Jar文件中。这就是当jar文件放在jar文件外部的同一目录中时,jar文件成功加载图像的原因。如果图像捆绑在jar文件中,则它们不再是要访问的文件系统文件,而是Jar文件资源。有一种不同的方法来加载这些,但很抱歉,我不知道它是我的头脑。

答案 3 :(得分:1)

检查文件的扩展名。我有这个问题因为扩展名是“PNG”,当我把它改成“png”时,一切都还可以。

答案 4 :(得分:0)

你不能指望一个JAR文件神奇地知道你的图像在哪里。如果您将JAR文件单独放在桌面上,它将在桌面上查找文件!代码

getImage("Floor.png")

默认情况下搜索JAR(或源项目)的当前目录,并且您希望如果JAR位于同一目录中,它将起作用。如果JAR在桌面上,它怎么知道Floor.png在哪里?当然,您可以指定硬编码路径

getImage("C:\Some Folder Path\Floor.png")

但是Floor.png必须在C:\ Some Folder Path \中才能使JAR正常工作。

听起来你真正想做的就是将图像保存在JAR文件中(其作用类似于ZIP文件)。这样做的教程就在这里:

http://download.oracle.com/javase/tutorial/uiswing/components/icon.html#getresource

答案 5 :(得分:0)

  

我知道你使用的ImageIcon:new javax.swing.ImageIcon(getClass()。getResource(“myimage.jpeg”)但是我没有找到任何类似的普通Image。

< head-desk />你应该真正开始阅读JavaDocs。否则你就是“魔法编码”。这通常是行不通的。

URL urlToImage = getClass().getResource("myimage.jpeg");
// If you need to support Java 1.3
Image image = Toolkit.getDefaultToolKit().getImage(urlToImage);
// If your users have dragged their JRE into this millennium
BufferedImage bufferedImage = ImageIO.read(urlToImage);