回答編集履歴

1 質問コード変更に伴う回答の改定

KSwordOfHaste

KSwordOfHaste score 18122

2017/02/12 16:07  投稿

コードが違ってたようなので改めてコメントします  
fisをcloseしてからImageをfisから作っているように見えます。  
 
```java  
File file = dialog.showOpenDialog();  
try (FileInputStream fis = new FileInputStream(file)) {  
 image = new Image(fis);  
 ImageView imageView = new Image(image);  
 ...  
}  
```  
のようにしかるべき場所でImageを作れば解決すると思います。  
 
なおJava7からtry-resource文が利用できますのでこれをうまく利用してはいかがでしょう?  
 
```java  
class XX implements AutoClosable { }  
 
try (XX x = new XX(...)) {  
 // x の有効範囲(スコープ)はtryブロックの中だけ  
}  
// tryブロックのスコープ外に出るとxは自動的にcloseされる  
...  
```  
 
try-resourceを使うと明示的にcloseする必要もなくストリームを保持する変数の有効範囲(tryブロック)を抜けると同時に確実にcloseするようなコードを表現できます。こうすると今回の問題のように「変数が参照可能な場所(スコープ内)で実際にはcloseされてしまっているストリームを誤って参照してしまう」といったようなバグの可能性を排除できます。  
 
---  
コード変更前の回答:  
 
filepathに何も代入しないまま new FileInputStream(filepath)しているように見えます。これだとNull Pointer Exceptionが発生するような気がします。
> 今度は画像が表示されません
もしNPEが発生しているなら「画像が表示されない」ではなくNPEがこの行で発生すると書いた方がよいと思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る