1

这就是我在控制器中的内容:

@FXML
private MediaView mediaView;

在按下处理按钮的方法中,我得到了文件选择器:

   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

当您加载 FXML 文件时 ,将创建一个MediaView实例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 回答