Jar ファイルから画像を読み込もうとしています。これが行です:
Image imgTrayIcon = new Image(display, this.getClass().getResourceAsStream("icon.ico"));
この方法を使用した多くの例を見てきましたが、そうしようとすると、画像が無効であるというエラーが表示されます。スタック トレースは次のとおりです。
[java] Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid image
[java] at org.eclipse.swt.SWT.error(SWT.java:4083)
[java] at org.eclipse.swt.SWT.error(SWT.java:3998)
[java] at org.eclipse.swt.SWT.error(SWT.java:3969)
[java] at org.eclipse.swt.internal.image.WinICOFileFormat.loadInfoHeader(WinICOFileFormat.java:200)
[java] at org.eclipse.swt.internal.image.WinICOFileFormat.loadIcon(WinICOFileFormat.java:127)
[java] at org.eclipse.swt.internal.image.WinICOFileFormat.loadFromByteStream(WinICOFileFormat.java:119)
[java] at org.eclipse.swt.internal.image.FileFormat.loadFromStream(FileFormat.java:48)
[java] at org.eclipse.swt.internal.image.FileFormat.load(FileFormat.java:84)
[java] at org.eclipse.swt.graphics.ImageLoader.load(ImageLoader.java:130)
[java] at org.eclipse.swt.graphics.ImageDataLoader.load(ImageDataLoader.java:22)
[java] at org.eclipse.swt.graphics.ImageData.<init>(ImageData.java:331)
[java] at org.eclipse.swt.graphics.Image.<init>(Image.java:545)
[java] at SysTray.run(Unknown Source)
私が使用しているアイコンは間違いなく有効です。アイコンツールを使用してこれを確認しました。また、コードと同じディレクトリにアイコンを配置して(Jar-ingではなく)、次のように使用してみました:
Image imgTrayIcon = new Image(display, "icon.ico");
これは問題なく機能しますが、Jar に入れようとすると、入りません。なぜこれが起こっているのか理解できないようです。ファイルがJarに追加されたかどうかを確認するためにJarを解凍しましたが、そこにあるようです。私のjarには複雑なフォルダー構造はありません。すべてのファイルとリソースは同じレベルのツリーにあります。
ここで何が問題なのかについてのアイデアはありますか? ありがとう
問題を再現するためのサンプル コードを次に示します。
Example.java
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;
class Example {
public static void main(String[] args) {
Display display = Display.getDefault();
Image imgTrayIcon = new Image(display, Example.class.getClassLoader().getResourceAsStream("icon.ico"));
}
}
コマンド:
javac -cp "SWT.jar" Example.java
jar cf Example.jar *.class *.ico
java -cp "Example.jar;SWT.jar" Example