質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

3079閲覧

JavaFXにて既存の画像をクリアして次の画像を読み込むプログラムを作りたいのですがダイアログから画像を選択するとエラーが発生する

mr0237

総合スコア164

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/02/21 16:14

JAVAの初心者です。練習でJavaFXを使って既に読み込んである画像をクリアして新たにダイアログから選択した画像を表示させるプログラムを作成しているのですが、一応前のページ通りにコードを組んだのですが、ダイアログから画像を選択すると下記のように、エラーが表示されて、画像が表示されません。

エラーメッセージ Executing C:\Users\Documents\NetBeansProjects\rensyuuyou\dist\run1218788048\rensyuuyou.jar using platform C:\Program Files\Java\jdk1.8.0_112\jre/bin/java 2 22, 2017 1:03:12 午前 com.sun.javafx.tk.quantum.PrismImageLoader2$PrismLoadListener imageLoadWarning WARNING: Corrupt JPEG data: 3748 extraneous bytes before marker 0xd5

このエラーが表示される原因はなんなんでしょうか?
又その解決策も教えてください。
コードは以下の通りです。

Java

1 2package rensyuuyou; 3 4import java.io.*; 5import java.util.logging.Level; 6import java.util.logging.Logger; 7 8import javafx.application.Application; 9import javafx.event.ActionEvent; 10import javafx.event.EventHandler; 11import javafx.geometry.Insets; 12import javafx.geometry.Pos; 13import javafx.scene.Scene; 14import javafx.scene.control.Button; 15import javafx.scene.layout.VBox; 16import javafx.stage.Stage; 17import javafx.stage.FileChooser; 18import javafx.scene.image.Image; 19import javafx.scene.image.ImageView; 20import javafx.stage.FileChooser; 21import javafx.scene.control.Alert; 22 23 24public class Rensyuuyou extends Application { 25 26 String filepath; 27 VBox imageBox = new VBox(); 28 ImageView imageView = new ImageView(); 29 30 @Override 31 public void start(Stage stage) { 32 stage.setTitle("練習用"); 33 stage.setWidth(1000); 34 stage.setHeight(1000); 35 36 Button botan = new Button("画像表示"); 37 botan.setPrefSize(900, 30); 38 39 VBox hyouji = new VBox(); 40 hyouji.setAlignment(Pos.CENTER); 41 42 hyouji.setPadding(new Insets(30, 30, 30, 30)); 43 stage.setScene(new Scene(hyouji)); 44 stage.show(); 45 imageBox.getChildren().add(imageView); 46 47 48 49 botan.setOnAction(new EventHandler<ActionEvent>() { 50 51 @Override 52 public void handle(ActionEvent event) { 53 54 55 FileChooser fileChooser = new FileChooser(); 56 fileChooser.setTitle("画像を開く"); 57 fileChooser.getExtensionFilters().addAll( 58 new FileChooser.ExtensionFilter("イメージファイル", "*.jpg", "*.png")); 59 File file = fileChooser.showOpenDialog(stage); 60 filepath = file.getAbsolutePath(); 61 62 FileInputStream fis = null; 63 try{ 64 fis = new FileInputStream(filepath); 65 }catch(IOException e){ 66 Alert keikoku = new Alert(Alert.AlertType.ERROR); 67 keikoku.setContentText("ファイルが読み込めません"); 68 69 70 }finally{ 71 if(fis != null){ 72 try { 73 } catch (Exception e) { 74 } 75 } 76 } 77 Image image = new Image(fis); 78 imageView.setImage(image); 79 imageView.setFitHeight(500); 80 imageView.setFitWidth(1000); 81 } 82 }); 83 84 85 86 } 87 88 89 90 public static void main(String[] args) { 91 launch(args); 92 } 93 94} 95

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

WARNING: Corrupt JPEG data: 3748 extraneous bytes before marker 0xd5

メッセージの意味は「jpeg内部のマーカー0xd5より前に3748バイトの不明な部分がある。中身が壊れているのではないか?」だと思います。

検索してみるとある種の機材で撮影した画像などに類似した問題があるようです。

いずれにせよJavaFXとして実装されているjpegデコーダーで解釈できない形式が含まれる画像ファイルであるということは言えるでしょう。その警告メッセージが出ても画像自体がロードできるのであれば警告メッセージを無視するという対処もありだと思いますが、画像自体のデコードに失敗したり、警告を無視できない事情があるのであれば画像ファイル自体をチェックにひっかからないようなものに変更せざるを得ません。

同様のエラーメッセージが出たときの対処例が書かれているページを見るとメタデータ(EXIF等)の部分をある種のソフトを使って取り去るという対処が書かれています。(このページ自体はJavaのデコーダーによる問題の記述ではありませんが、おそらく多くのJPEGデコーダーはIndependent JPEG Groupが提供している参照実装をベースに作られているでしょうから現象や対処は同じ考え方でよいと思います。)

JFIFなどの除去を試してみるならば「JFIF情報 除去」で検索するといくつかヒットするようなので都合のよさそうなものを選んで試してみてはいかがでしょうか?

投稿2017/02/21 17:43

編集2017/02/22 01:12
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問