//fix this/ Javaコードの間違いをさがせ!
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
Articles
Java
Java技術関連記事
Fix This
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
JavaFX Media APIにより、ビデオ・コンテンツをとても簡単にデスクトップ・アプリケーションに追加できます。APIが非常に豊富な機能を備えている一方、多くのクラスが関連するため、注意しないとシンプルなユースケースでも間違いを犯してしまう場合があります。
以下のMediaQuizクラスのApplicationのstartメソッドのコードで、ビデオ・クリップが再生されません。なぜでしょうか?
stage.setScene(SceneBuilder.create()
.width(960).height(540)
.root(
StackPaneBuilder.create().children(
new MediaView(
new MediaPlayer(
new Media(
getClass().getResource("quiz.mp4").toString()))))
.build())
.build());
stage.show();
以下のソース・レイアウトを使用しました。
・org ・steveonjava ・MediaQuiz.java ・quiz.mp4
上記のコードでビデオ・クリップが再生されない原因はどれでしょうか?
1) メディア・ファイルをロードするためのリソース・パスが間違っている
2) JavaFX 2は、H.264でエンコードしたビデオをサポートしない
3) ビデオを有効化するための制御機能がない
4) 正しいStackPaneレイアウト制約セットがなく、MediaViewが表示されない
<ヒント>
このビルダーのシンタックスは素晴らしいですが、明らかな問題点が隠れているかも。
正解は3)です。メディアをロードし、MediaViewをシーンに正しく挿入しましたが、MediaPlayerクラスのplay()を呼び出してメディアの再生をスタートしていません。
これは、メディア・クラスを3種類使っているため見過ごしやすいバグですが、少し調べれば、原因を見つけるのはそれほど難しくありません。