Java Mediaplayer - играть снова - PullRequest
0 голосов
/ 21 июня 2020

Вот мой код:

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 (), чтобы снова можно было играть?

1 Ответ

0 голосов
/ 21 июня 2020

Что произошло:

Достижение конца носителя (или 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();.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...