Javafx获取作为Media加载的视频的宽度和高度(分辨率)

时间:2016-10-31 17:06:33

标签: java javafx

我正在使用JavaFX开发视频播放器。我正在从本地文件系统加载一个视频到JavaFX类Media。然后我想获得宽度和高度,以便我可以将场景的尺寸设置为该尺寸:

Media media = new Media(
    "file:/D:/Videos/Cosmos/Cosmos.A.Space.Time.Odyssey.S01E02.HDTV.x264.PROPER-LOL.mp4"
);
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
MediaView mediaView = new MediaView(mediaPlayer);
root.getChildren().add( mediaView);
Scene scene = new Scene(root, media.getWidth(), media.getHeight());

然而,当我运行此代码时,media.getWidth()和media.getHeight()都返回0.如何获取尺寸?

2 个答案:

答案 0 :(得分:1)

来自Media class documentation

  

媒体信息是异步获取的,因此在实例化类之后不一定立即可用。但是,如果该实例已与MediaPlayer相关联并且该播放器已转换为MediaPlayer.Status.READY状态,则应提供所有信息。

当MediaPlayer处于READY状态时,该大小可用。最简单的方法是在播放媒体之前设置一个处理程序,它将在您的窗口上调用sizeToScene()

mediaPlayer.setOnReady(() -> stage.sizeToScene());
mediaPlayer.setAutoPlay(true);

// ...

Scene scene = new Scene(root);

答案 1 :(得分:0)

感谢@VGR,我意识到我只需要等待加载mediaPlayer:

            mediaPlayer.setOnReady(new Runnable() {    
                @Override
                public void run() {
                    // Add Pane to scene
                    Scene scene = new Scene(root, media.getWidth(), media.getHeight());
                    primaryStage.setScene(scene);
                    primaryStage.show();  
                }
            });