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 ディレクトリー、examples ディレクトリー、ch5 ディレクトリー、および images ディレクトリー (おそらく同じ章の他のソース コードに関連する) に配置しようとしました。

「パッケージexamples.ch5;」があります。ファイルの先頭にある行。

画像が読み込まれないのはなぜですか?

4

4 に答える 4

3

java.io.FileNotFoundExceptionをスローしています。したがって、間違ったパスを指定したか、指定されたパスで画像を使用できません。

したがって、Eclipseワークスペースに移動して、実行しようとしているプロジェクト(Chapter05)を開き、ファイルLabelExample.javaを含むinterspatial.gifイメージをsrcフォルダーに貼り付けます。それならうまくいくはずだと思います。

于 2009-09-15T07:16:56.890 に答える
1

画像の場所が間違っているか、名前が間違っているようです。コード内で名前が同じであることを確認し、それをいくつかの新しい場所にコピーして、表示できるかどうかを確認します。

画像は、おそらくソースファイルとまったく同じフォルダ(おそらく「src」)に配置する必要があります。

于 2009-09-15T04:19:41.863 に答える
1

... の 2 番目のパラメーター

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 に答える