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。我怎么得到尺寸呢?

来自Media类文档:

媒体信息是异步获得的,因此在类实例化后不一定立即可用。然而,如果实例与MediaPlayer相关联,并且该玩家已经过渡到MediaPlayer.Status.READY状态,则所有信息都应该可用。

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

mediaPlayer.setOnReady(() -> stage.sizeToScene());
mediaPlayer.setAutoPlay(true);
// ...
Scene scene = new Scene(root);

多亏了@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();  
                }
            });

最新更新