2017-05-30 13 views
1

GridPaneに画像を表示する際に問題があります。入力ストリームをnullにしないでください。例外は、ImageViewの作成オブジェクトの最初の行にあります。あなたが見ることができるように写真はフォルダにあります。何が問題になる可能性がありますか?それは、画像を見つけていないためだImageViewで画像のURLが見つかりません

ImageView windows = new ImageView(new Image(Main.class.getResourceAsStream("res/windows.png"))); 
    ImageView linux = new ImageView(new Image(Main.class.getResourceAsStream("res/windows.png"))); 
    ImageView mac = new ImageView(new Image(Main.class.getResourceAsStream("res/windows.png"))); 
    ImageView android= new ImageView(new Image(Main.class.getResourceAsStream("res/windows.png"))); 

    GridPane gpanel = new GridPane(); 
    gpanel.setPadding(new Insets(5));  
    gpanel.add(windows, 0, 0); 
    gpanel.add(linux, 1, 0); 
    gpanel.add(mac, 0, 1); 
    gpanel.add(android, 1, 1); 

enter image description here

答えて

3

、あなたが例えばので、パスの先頭にresを削除する必要があります。

この:"res/windows.png" - >は次のようになります。"/windows.png" ...等々。

getResourceAsStream(String name)は、クラスに関連付けられたリソースを検索することで特定の名前のリソースを見つけ出します。プロジェクトのルートから開始しますが、resは別のパッケージではないため、先頭に追加する必要はありません。相対パス。

さらに、その後、あなたはこのように(あなたの例では)あなたのmainクラスからアクセスすることができ、あなたがanotherPackageと呼ばれる別のパッケージにwindows.pngを持っていることとします"/anotherPackage/windows.png"を。

+0

ありがとうございました、ファイルクラスのオブジェクトを作成して解決しました。そのオブジェクトはImageオブジェクトとImageViewオブジェクトを入れています – MiOnIs

+0

'' /anotherPackage/windows.png "'は相対パスですか?私はそれがリソースになると、開始に '/'を追加すると絶対になると思ったのですか?例えば、クラス 'com.foo.Bar'を持ち、最初に'/'を使わずに' Bar.class.getResource( "...") 'を呼び出すと、そのクラスのpackage_を_relativeで検索します。したがって、 '' Image.png ''を渡すと '/ com/foo/Image.png'が検索されます。しかし、 '/'があれば '/ Image.png'を検索します。私は完全に間違っている可能性があります。それが私が求めている理由です。 – Slaw

+0

@Slawこれを読んでくださいhttp://www.xyzws.com/javafaq/what-is-the-difference-between-絶対的な相対的なものとカナン的なもののファイルまたはディレクトリ/60 – Yahya

関連する問題