「//fix this/」の記事インデックス

//fix this/ Javaコードの間違いをさがせ!


このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。


第4回目 (Java Magazine 2012/Sep-Octからの出題)


1. 今回のテーマ 「JavaFX Media API」 

JavaFX Media APIにより、ビデオ・コンテンツをとても簡単にデスクトップ・アプリケーションに追加できます。APIが非常に豊富な機能を備えている一方、多くのクラスが関連するため、注意しないとシンプルなユースケースでも間違いを犯してしまう場合があります。



2. コード

以下の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


3.正しいのはどれ?

上記のコードでビデオ・クリップが再生されない原因はどれでしょうか?

1) メディア・ファイルをロードするためのリソース・パスが間違っている

2) JavaFX 2は、H.264でエンコードしたビデオをサポートしない

3) ビデオを有効化するための制御機能がない

4) 正しいStackPaneレイアウト制約セットがなく、MediaViewが表示されない

<ヒント>
このビルダーのシンタックスは素晴らしいですが、明らかな問題点が隠れているかも。






【答え】

正解は3)です。メディアをロードし、MediaViewをシーンに正しく挿入しましたが、MediaPlayerクラスのplay()を呼び出してメディアの再生をスタートしていません。
これは、メディア・クラスを3種類使っているため見過ごしやすいバグですが、少し調べれば、原因を見つけるのはそれほど難しくありません。


<< 第3回へ戻る I 第5回へ進む >>

「//fix this/」の記事インデックス