1

これは私がコントローラーに持っているものです:

@FXML
private MediaView mediaView;

ハンドルボタンが押されたメソッドで、filechooserを取得しました。

   File file = fileChooser.showOpenDialog(null);

    if(file != null){
        initPlayer(file.toURI().toString());
    }   

これはメソッドinitPlayerです:

private void initPlayer (String uri) {
        if (uri == null)
            return;
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer = null;
        }

        Media media = new Media(uri);
        mediaPlayer = new MediaPlayer(media);
        mediaPlayer.setAutoPlay(true);
        mediaView = new MediaView(mediaPlayer);
        mediaPlayer.setOnReady(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
            }
        });
    }

これは、シーンビルダーで作成された私のビューのコードの一部です。

<Pane layoutX="80.0" layoutY="14.0" prefHeight="480.0" prefWidth="640.0">
          <MediaView fx:id="mediaView" fitHeight="480.0" fitWidth="640.0" />
        </Pane>

ファイルを選択すると、音は聞こえますが、ビデオが表示されません。このコードの何が問題になっていますか?私が欠けているものは何ですか?

4

3 に答える 3

5

MediaViewインスタンスはによって作成され、 FXMLファイルをロードするときにに FXMLLoader配置されます。Pane

新しいものを作成する必要はありません。作成するMediaViewと、シーンにアタッチされないため、何も表示されません。

それ以外の:

  mediaView = new MediaView(mediaPlayer);

書く:

 mediaView.setMediaPlayer(mediaPlayer);
于 2012-11-23T06:08:57.287 に答える
1

Windows XP コンピュータを使用していて、音声しか聞こえない場合は、コーデックが不足している可能性があります。

http://docs.oracle.com/javafx/2/system_requirements_2-2/jfxpub-system_requirements_2-2.htmを参照してください。

または、プレーヤーが提供するエラーを確認できます。

mediaPlayer.setOnError(new Runnable() {    
    @Override
    public void run() {
        String message = mediaPlayer.errorProperty().get().getMessage();
        System.out.println(message);
    }
});
于 2013-08-27T12:54:09.183 に答える
0

あなたのFxmlであなたが必要です

<FlowPane alignment="CENTER" columnHalignment="CENTER" layoutX="9.0" layoutY="48.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="9.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="48.0">
<children>
<MediaView fx:id="mediaView">
</MediaView>
</children>
</FlowPane>

そしてあなたのコントローラーで:

 @FXML    private MediaPlayer mediaPlayer;
 @FXML    private Duration duration;
 @FXML    private MediaView mediaView;
 ....

 @Override
    public void initialize(URL url, ResourceBundle rb) {
        try {
            init();
        } catch (MalformedURLException ex) {
            Logger.getLogger(MainOnlineController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


  public void init() throws MalformedURLException { 
        ....
        mediaPlayer = new MediaPlayer(media);
        mediaPlayer.setAutoPlay(true);
        mediaView.setMediaPlayer(mediaPlayer);
        mediaPlayer.setOnPlaying(new Runnable() {
                    public void run() {
                        if (stopRequested) {
                            mediaPlayer.pause();
                            stopRequested = false;
                        } else {
                            playButton.setText("||");
                        }
                    }
                });
    ...other methods for mediaPlayer
于 2016-05-06T07:25:57.220 に答える