Я разрабатываю приложение музыкальной библиотеки с помощью JavaFX, и у меня возникают некоторые проблемы с тем, как я должен правильно использовать класс MediaPlayer.
Это мой текущий метод настройки и воспроизведения аудиофайлов:
private static MediaPlayer musicPlayer;
public static void setMedia(String path) {
try {
musicPlayer = new MediaPlayer(new Media(new File(path).toURI().toASCIIString()));
musicPlayer.play();
} catch (Exception e) {
System.out.println("invald file");
System.out.println(e.getMessage());
}
}
Скажем, например, у меня есть два аудиофайла...
file1.mp3
file2.mp3
...И две кнопки, которые отправляют один из этих двух файлов вышеуказанным методом:
button1.setOnAction(event -> {
setMedia("file1.mp3");
});
button2.setOnAction(event -> {
setMedia("file2.mp3");
});
Обычно было бы разумно, чтобы оба аудиофайла воспроизводились друг над другом, потому что я создаю новый объект MediaPlayer каждый раз, когда я вызываю метод, однако этот объект является статическим. Может быть, я неправильно понимаю, как работают статические объекты, но разве это не должно означать, что может быть только один экземпляр этого объекта? И, в свою очередь, не будет ли это означать, что при каждом вызове метода setMedia медиафайл объекта MediaPlayer будет перезаписываться?
Я не нашел способа «установить» или «перезаписать» медиафайл для объекта MediaPlayer без создания его нового экземпляра. Похоже, у него нет способа сделать это. Это наводит меня на мысль, что у меня должен быть массив объектов MediaPlayer для каждого аудиофайла. Это правильно? Или я просто что-то пропустил здесь?
MediaPlayer
. - person James_D   schedule 30.05.2017MediaPlayer
является свойством класса, а не свойством экземпляров класса. (Таким образом, есть только одна ссылкаMediaPlayer
, даже если вы создаете множество экземпляров любого класса, в котором все это определено.) - person James_D   schedule 30.05.2017