我知道,我知道,这已被问过。但是我看过的每个资源都使用IconImages,而我只有简单的图像。图像不在jar中显示,但在编译器中显示?
有没有不同的解决方案?请大家帮忙,因为我一直在进行研究,试图找出几天没有进展的情况。
Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");
编辑:如果我是确保瓶子不会压缩和我创造了罐子图像一个单独的目录,并把正确的文件路径,将此代码的工作?
我知道,我知道,这已被问过。但是我看过的每个资源都使用IconImages,而我只有简单的图像。图像不在jar中显示,但在编译器中显示?
有没有不同的解决方案?请大家帮忙,因为我一直在进行研究,试图找出几天没有进展的情况。
Image Floor = Toolkit.getDefaultToolkit().getImage("Floor.PNG");
编辑:如果我是确保瓶子不会压缩和我创造了罐子图像一个单独的目录,并把正确的文件路径,将此代码的工作?
请确保您知道您当前的目录是什么,以及它与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本身,比如在img目录中,并在那里引用它们。但是,然后对图像的更改需要一个新的jar,这对于开发目的来说可能不是期望的。
Toolkit#getImage(String s)查找文件,并且可能您的图像位于Jar中,并且现在是资源而非文件。期待为此使用资源。
请注意ImageIO.read(...)可以接受InputStream参数,Class类有一个方法getResourceAsStream(...),它可以将资源放入ImageIO可以读取的Stream中。试试看。
另外,当你尝试你在做什么时,你是否收到任何错误消息?
getImage调用正在文件系统工作目录中寻找,而不是在Jar文件中。这就是为什么当jar文件放在jar文件以外的相同目录下时,它会成功加载图像。如果图像捆绑在jar文件中,它们不再是要访问的文件系统文件,而是Jar文件资源。有不同的方式来加载这些,但对不起,我不知道它在我的头顶。
你所说的是完全发生在我身上的事情。 :P – DGH94 2011-02-22 23:41:23
你不能指望一个JAR文件神奇地知道你的图像在哪里。如果您将JAR文件放在桌面上,它将在桌面上查找文件!该代码
getImage("Floor.png")
搜索由默认的JAR(或源项目)的当前目录和你所期望的是,如果JAR在同一个目录中,它会工作。如果JAR在桌面上,它怎么知道Floor.png在哪里?当然,你可以指定一个硬编码路径
getImage("C:\Some Folder Path\Floor.png")
但随后Floor.png必须是在C:\一些文件夹路径\为JAR才能正常工作。
这听起来像你真正想要做的是保持图像的JAR文件(这就像一个ZIP文件)。在这样做的教程是在这里:
http://download.oracle.com/javase/tutorial/uiswing/components/icon.html#getresource
而且我知道你ImageIcon的使用方法:新javax.swing.ImageIcon中(的getClass()的getResource( “myimage.jpeg”),但我没有发现对于普通图像类似的事情。
<头台/ >你应该真正进入阅读JavaDoc中,否则你是“魔法编码”。这通常是行不通的。
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);
检查文件的扩展名。我遇到了这个问题,因为扩展名是“PNG”,当我将其改为“PNG”时,一切正常。
你所说的“在编译器显示”究竟意味着什么?编译器不显示图像。 – EJP 2011-02-23 01:21:23