我正在使用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();
}
});