首页 > 解决方案 > 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() 之后调用一些特殊方法以使其可以再次播放吗?

标签: javajavafx

解决方案


发生了什么:

播放时到达媒体末尾(或定义了 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();


推荐阅读