12

デスクトップ アプリを作成しましたが、生成された実行可能な jar で問題が発生しました。Eclipse 環境ではすべて正常に動作しますが、jar を生成すると、swtコンポーネント (メニュー、タブなど) のみが表示されます。その他のライブラリの場所は、空白の領域 (ギャラリーを生成するライブラリ) です。同じものは表示されませんset ToolBar(画像付きのボタンを含む)、表示されGoogleMap.htmlません。

これらの外部ソースを含む実行可能 jar を正しく生成するにはどうすればよいですか?

ツールバーの画像読み込みコード:

folderSearchIcon = new Image(display, this.getClass().getResourceAsStream("images/search_folder.png"));

GoogleMap.html 読み込みコード:

File mapFile = new File("resources/GoogleMap.html");        
if(!mapFile.exists()) {
    System.out.println("File doesn't exist! " + mapFile.getAbsolutePath()); 
    return;
}

実行可能な jar の生成:

ここに画像の説明を入力

Eclipse での私のアプリ構造と生成された jar 構造:

ここに画像の説明を入力

生成されたマニフェスト:

Manifest-Version: 1.0
Rsrc-Class-Path: ./ swt.jar commons-imaging-1.0-SNAPSHOT.jar org.eclip
  se.nebula.widgets.gallery_0.5.3.201210262156.jar xmpcore.jar metadata
  -extractor-2.6.3.jar
Class-Path: .
Rsrc-Main-Class: geotagger.AppInit
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
4

4 に答える 4

9

ツールバー イメージの場合は、スラッシュを追加する必要があります。

this.getClass().getResourceAsStream("images/search_folder.png")

あなたが必要

this.getClass().getResourceAsStream("/images/search_folder.png")

これは、JavaDocsで説明されているように、がClass.getResourceAsStream問題のクラスのパッケージに対して相対パスを解決するためです。スラッシュを前に付けると、代わりに検索されます。これは、スクリーンショットが必要であることを示唆しています。thiscom.example.FoogetResourceAsStream("images/search_folder.png")com/example/images/search_folder.pngimages/search_folder.png

同様のトリックを使用する必要がありますGoogleMap.html- を使用して JAR 内からアイテムをロードすることはできませんが、JAR内の HTML ファイルへのポイントを取得するためにjava.io.File使用できます。this.getClass().getResource("/GoogleMap.html")java.net.URL

于 2012-12-21T12:38:57.077 に答える
3

ここでわかるように:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)

getResourceAsStream() は、呼び出し元のクラスと同じパッケージ内のファイルを探します。したがって、JAR 内で「com/whatever/more/images/search_folder.png」という名前のファイルを探しますが、これはもちろん存在しません。「resources」ディレクトリの内容が直接ディレクトリのルートに置かれているためです。 JAR エクスポーターによる JAR ファイル。

代わりにhttp://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)を使用してください。

2 番目の部分: HTML をロードしても機能しません。「resources/GoogleMap.html」という名前のファイルを見つけようとしましたが、それは Java プログラム プロセスの作業ディレクトリで、JAR の外側に見えます。HTML をロードするには、前の関数を再度使用する必要があります。

http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)

于 2012-12-21T12:44:08.780 に答える