FXML如下所示
<MediaView fx:id="media" x="0" y="200" fitHeight="800" fitWidth="1000" visible="true">
<mediaPlayer>
<MediaPlayer fx:id="videoPlayer" autoPlay="false" >
<media>
<Media fx:id="currentlyPlaying" source="${controller.songURL}"/>
</media>
</MediaPlayer>
</mediaPlayer>
</MediaView>
这给了我错误:
引起:javafx.fxml.LoadException:无法绑定到无类型对象。
显然是因为我试图绑定到引用项。
实现这一目标的首选方法是什么(我理解这是一个相对术语,我道歉)这样我可以让文件播放的不只是一个示例视频?
谢谢!
**编辑的标题,匆忙打字。我一直在研究这个问题。到目前为止没有运气。
答案 0 :(得分:0)
source
不是Media
中的可写属性:它是仅可通过构造函数设置的最终值。因此无法绑定它(因为它无法改变)。同样,media
是MediaPlayer
中的常量值。
因此,您需要安排将MediaView
的{{1}}属性绑定到控制器的mediaPlayer
属性。我在FXML中看不到任何方法:您需要在控制器的songURL
方法中执行此操作。像
initialize()
(假设您在控制器中定义了media.mediaPlayerProperty().bind(Bindings.createObjectBinding(() -> {
Media m = new Media(songURL.get());
MediaPlayer player = new MediaPlayer(m);
player.setAutoPlay(false);
return player ;
}, songURL));
。
然后,您只需删除FXML中StringProperty songURL
标记的内容:
<MediaView>