2011-02-22 63 views
3

我知道,我知道,这已被问过。但是我看过的每个资源都使用IconImages,而我只有简单的图像。图像不在jar中显示,但在编译器中显示?

有没有不同的解决方案?请大家帮忙,因为我一直在进行研究,试图找出几天没有进展的情况。

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

编辑:如果我是确保瓶子不会压缩和我创造了罐子图像一个单独的目录,并把正确的文件路径,将此代码的工作?

+0

你所说的“在编译器显示”究竟意味着什么?编译器不显示图像。 – EJP 2011-02-23 01:21:23

回答

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本身,比如在img目录中,并在那里引用它们。但是,然后对图像的更改需要一个新的jar,这对于开发目的来说可能不是期望的。

+0

图像的路径是正确的,我确定。只是当我启动jar时,它是一个灰色屏幕,没有任何图像。我知道的ImageIcon你使用:'新javax.swing.ImageIcon中(的getClass()的getResource(“myimage.jpeg”)',但我还没有发现普通图片类似的话 – DGH94 2011-02-22 23:16:41

+0

是否有逻辑的工作是您的。? JAR清单正确定义? – corsiKa 2011-02-22 23:20:11

+0

是的,我的清单文件工作正常,如果罐子是在同一个目录中的图像,该图像出现。 – DGH94 2011-02-22 23:23:31

3

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

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

另外,当你尝试你在做什么时,你是否收到任何错误消息?

+0

任何错误。我想补充日如果jar和图像位于同一个目录中,它可以正常工作,但是一旦我将它从外面拉到桌面上,它就会变得灰暗和暗淡。 – DGH94 2011-02-22 23:24:25

+0

请翻译“将它从那里推出并放到桌面上......”您可能会认为我们比您的实际情况更了解您的情况。 – 2011-02-22 23:25:35

+0

哈哈,对不起。我最初有jar文件在图像相同的目录中,并且它工作正常。然后,我将该目录外的jar移动到桌面上,在那里无法访问图像,因此不显示它们。 – DGH94 2011-02-22 23:38:17

1

getImage调用正在文件系统工作目录中寻找,而不是在Jar文件中。这就是为什么当jar文件放在jar文件以外的相同目录下时,它会成功加载图像。如果图像捆绑在jar文件中,它们不再是要访问的文件系统文件,而是Jar文件资源。有不同的方式来加载这些,但对不起,我不知道它在我的头顶。

+0

你所说的是完全发生在我身上的事情。 :P – DGH94 2011-02-22 23:41:23

0

你不能指望一个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

0

而且我知道你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); 
1

检查文件的扩展名。我遇到了这个问题,因为扩展名是“PNG”,当我将其改为“PNG”时,一切正常。

相关问题