2016-12-21 8 views
-1

ImをEclipseで作成しています。私は日食でそれを実行すると、それは動作します。
これは、画像へのパスです:C:\ Users \ユーザー例\ワークスペース\例\ SRC \画像
これは私のコードです:私は別のファイルにこのコードから画像にアクセスイメージをeclipseで取得しますが、.jarでは取得しません

public String name; 
public Rectangle example; 
public Image exampleImage; 

public Example(String name) { 
    this.name = name; 
    exampleImage = new Image("./images/example.png"); 
    example = new Rectangle(exampleImage.getWidth(), exampleImage.getHeight()); 
    example.setFill(new ImagePattern(exampleImage));  
} 



「ファイル "./images/example.png"::./ SRC /画像を

public Example example; 
public void buildExample(){ 
    example = new Example("example"); 
    borderPane.getChildren().add(example.getImage()); 
} 

すべての.javaは、すべての画像は、Eclipseでの画像
でこれらのディレクトリを作業しているSRC
でありますそれは.jarファイルを作成すると、パスは
\ Example.jar \画像である「
を/example.pngすべての.classファイルはいつIRすべての画像は、画像内に
あるExample.jar
であります私はこのエラーが発生します:
スレッド "JavaFXアプリケーションスレッド" java.lang.IllegalArgumentExceptionで例外:
なぜそれは日食ではなく、.jarで動作しますか?

+0

にコンストラクタ引数としてurl.toString()を与えるあなたは、あなたが負荷にしようとしている実際のコードを表示することができます、パスの代わりに、画像? –

+0

'jar tvf Example.jar'の出力を質問に追加してください。 – jewelsea

+0

出力はどういう意味ですか? –

答えて

0

これは、Eclipseがコードをコンパイルし、画像を.jarに添付しないためです。これを.jarファイルで動作させたい場合は、.jarがあるフォルダに "src/images /"というディレクトリを作成し、そのディレクトリに "example.png"イメージを置きます。 .jarを実行すると、イメージにロードされます。

+0

私が.jarを作るとき、私はそれを.zipで見る。イメージはそこにあった –

+0

'.'または' ..'はパスの一部としてjar afaikの内部では機能しません... – fabian

0

編集: 投稿されたコードはコンパイルされません。画像を読み取る方法のチュートリアルについては、このリンクをクリックしてください:https://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

は、これは二つのことが原因で発生することができ:

  1. ファイルは、JARファイルにエクスポートされません。これを修正するには、Project-Properties-> Java Build Path-> Sourceに移動して、すべてのファイルをインクルードしていて、特定のファイルを除外しないかどうかを確認します。
  2. 2番目の可能性は誤ったパスです。何とかeclipseのパスは異なって解決されます。これに対する解決策は、aクラスを介してパスを定義することです。 のは、次のようなフォルダ構造を持っているとしましょう:
    Folder structure
    あなたがパスとしてこれを使用する場合は、あなたが安全に画像にアクセスすることができます。

    Prog.class.getResource(「IMG/foo.jpgという」); 、jarファイルからファイルを開いて、この方法を使用するには

+0

Javaビルドパスでは:Included(All)、Excluded(None)under Example/src –

+0

次に、2番目の解決策に進んでください。同じフォルダまたは上のいくつかのフォルダにクラスを配置し、上記のように開始点としてこのクラスを使用してアクセスします。 –

+0

btw。そのような画像は一般的にロードされません。たとえば、javax.imageio.ImageIOを使用してイメージをロードすることができます。 詳細については、このリンクをチェックしてください。 –

1

URL url = this.getClass().getClassLoader().getResource(filePath); 

Imageクラス

+1

'url.toExternalForm 'url.toString()'の代わりに ' – fabian

関連する問題