java - Java Mediaplayer - 再次播放
问题描述
这是我的代码:
public abstract class Car {
MediaPlayer mediaPlayer;
public Car() {
}
public void sound() {
mediaPlayer.play();
}
}
public class BlueCar extends Car{
public BlueCar() {
String path = "src/sound_horn_1.mp3";
Media hit = new Media(new File(path).toURI().toString());
mediaPlayer = new MediaPlayer(hit);
}
public void addCarOnRoad() {
//
}
}
public class Road {
List<Car> cars = new ArrayList<>();
public void chooseAnyAndMakeHorn() {
Random rnd = new Random();
cars.get(rnd.nextInt((cars.size() - 0) + 1) + 0);
}
}
所以每个对象 Car 都有自己的声音(媒体播放器实例),我想从任何 Car 实例多次播放该声音。
但是每辆车只能播放一次——一旦播放了声音,就不能在同一辆车上再次播放。
我哪里错了?
我应该在 mediaPlayer.play() 之后调用一些特殊方法以使其可以再次播放吗?
解决方案
发生了什么:
播放时到达媒体末尾(或定义了 stopTime)不会导致状态从 PLAYING 更改。因此,例如,如果媒体播放到其末尾,然后手动搜索到媒体内的较早时间,则播放将从新的媒体时间继续。
https://docs.oracle.com/javafx/2/api/javafx/scene/media/MediaPlayer.Status.html
https://docs.oracle.com/javafx/2/api/javafx/scene/media/MediaPlayer.html#startTimeProperty()
可以做什么:
解决方案 1
尝试把mediaPlayer.setStartTime(Duration.Zero);
之前mediaPlayer.play();
。
解决方案 2
尝试把mediaPlayer.seek(Duration.Zero);
之前mediaPlayer.play();
。
推荐阅读
- java - 我想创建一个 bean 并在服务启动时让它活着(2 个组件的上下文)
- mysql - 如何计算多个类别中的品牌
- android - TimePicker 对话框未显示 AM PM 选择的颜色
- continuous-integration - 我可以从 Gitlab 中的未解决问题创建功能分支吗?
- python-3.x - python3函数检查参数是否是2的幂,带有while循环并且不使用数学函数
- ios - 未调用 iOS 13 UIPanGestureRecognizer 选择器
- c++ - c++17 filesystem::remove_all 带通配符路径
- r - 警告消息:29192 未能在 lubridate 中解析
- javascript - Javascript Owl 轮播,如何从 API 动态设置 autoplayTimeout 字段?
- go - ioutil.ReadAll 替代方案,只消耗数据,不复制字节数组