图像未加载

时间:2009-09-15 00:28:15

标签: java swt jface

尝试运行代码

// Create a label with an image
Image image = new Image(display, "interspatial.gif");
Label imageLabel = new Label(shell, SWT.NONE);
imageLabel.setImage(image);

给我错误信息

Exception in thread "main" org.eclipse.swt.SWTException: 
        i/o error (java.io.FileNotFoundException: interspatial.gif 
        (O sistema não pode encontrar o arquivo especificado))
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.graphics.ImageLoader.load(Unknown Source)
    at org.eclipse.swt.graphics.ImageDataLoader.load(Unknown Source)
    at org.eclipse.swt.graphics.ImageData.<init>(Unknown Source)
    at org.eclipse.swt.graphics.Image.<init>(Unknown Source)
    at examples.ch5.LabelExample.main(LabelExample.java:31)
Caused by: java.io.FileNotFoundException:
        interspatial.gif 
        (O sistema não pode encontrar o arquivo especificado)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at org.eclipse.swt.internal.Compatibility.newFileInputStream(Unknown Source)
    ... 5 more

其他信息:

在Eclipse中,我扩展了Chapter05,然后是examples.ch5,然后右键单击LabelExample.java,然后选择Run As,然后选择1 Java Application。

我尝试将interspatial.gif放在Chapter05目录中,示例目录,ch5目录和图像目录(可能与同一章中的其他源代码相关)。

有一个“包examples.ch5;”在文件开头的行。

为什么图片没有加载?

4 个答案:

答案 0 :(得分:3)

抛出java.io.FileNotFoundException。因此,您给出了错误的路径,或者您的图像在给定的路径上不可用。

所以,只需转到Eclipse工作区并打开您尝试运行的项目(第05章),然后将文件LabelExample.java粘贴到src文件夹中的interspatial.gif图像。然后我认为它应该有用。

答案 1 :(得分:1)

看起来您的图片位置错误或名称错误。确保代码中的名称相同,然后将其复制到一些新的位置以查看是否可以显示它。

图像可能需要与源文件位于完全相同的文件夹中,可能是'src'。

答案 2 :(得分:1)

......的第二个参数

new Image(display, "interspatial.gif")

...是一个文件路径。由于“interspatial.gif”不是不是绝对路径,而是相对路径,它与执行应用程序的当前工作目录(CWD)有关。

在Eclipse中运行应用程序时,默认CWD是项目根目录。因此,将“interspatial.gif”文件移动到Eclipse项目的根目录将解决问题。

答案 3 :(得分:0)

在您的示例中,

Image image = new Image(display, "interspatial.gif");

您的图片需要与此代码存在于同一路径中。如果这不是您想要的,您可以使用插件的Activator#getImageDescriptor(String path),它使用插件相对路径。

另外,如果您想重复使用此图片,可以覆盖AbstractUIPlugin#initializeImageRegistry(ImageRegistry reg)并将图像添加到注册表中,稍后通过AbstractUIPlugin#getImageRegistry()#get(String key)获取。注册表处理图像的处理。