1

试图运行代码

// 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

4 回答 4

3

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

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

于 2009-09-15T07:16:56.890 回答
1

您的图片似乎在错误的位置或名称错误。确保代码中的名称相同,并将其复制到几个新位置,看看是否可以显示。

图像可能需要与源文件放在完全相同的文件夹中,可能是“src”。

于 2009-09-15T04:19:41.863 回答
1

第二个参数...

new Image(display, "interspatial.gif")

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

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

于 2012-02-13T17:31:44.350 回答
0

在你的例子中,

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

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

顺便说一句,如果你想重用这个图像,你可以覆盖这个图像AbstractUIPlugin#initializeImageRegistry(ImageRegistry reg)并将其添加到注册表中,稍后通过AbstractUIPlugin#getImageRegistry()#get(String key). 注册表处理图像的处置。

于 2009-10-12T23:26:24.437 回答