2016-04-08 1 views
0

Я использую метод JavaFx для воспроизведения музыкальных файлов, но он не работает (звук не воспроизводится). Я чувствую, что проблема заключается в моем расположении файлов. Где я помещаю .mp3 в мою папку java-проектов, чтобы на нее ссылалась простая строка? Или есть другой способ ссылаться на него? JavaFX Media принимает параметр String.Где я могу поместить файл (.mp3), чтобы его можно было прочитать?

String test = "test.mp3"; 
Media x = new Media(test); 
MediaPlayer mediaPlayer = new MediaPlayer(x); 
mediaPlayer.play(); 
+0

Вы уже пробовали пропустить путь к файлу вместе с файлом? например «C:/Users/You/Documents/Java Projects/Project 1/test.mp3» – wbrugato

+0

Да, это дало мне ошибку, в которой упоминались незаконные символы. У меня есть папка с ресурсами, которую я добавил в своих ссылках на библиотеки, которые я могу ссылаться на файлы там, независимо от того, на каком жестком диске работает программа, но в этом случае это тоже не работает. –

ответ

0

Если вы читали JavaDoc из Media, то вы знаете, что вы должны дать HTTP, файл или банку URI в конструктор, который вы используете.
На самом деле, глядя на исходный код, я удивляюсь, что вы не получаете IllegalArgumentException.

Однако, используйте Class.getResource(...).toURI().toString(), чтобы получить строку, которую вы хотите дать конструктору Media.
Комбинация, из которой Class объект вы вызываете это, и то, что вы даете методу getResource(), зависит от того, как вы планируете свои файлы.
Если у вас есть файл, кроме вашего класса, getClass().getResource("file.name") должен работать.
Если у вас есть файл в корне вашего пути к классам, то должен сделать getClass().getResource("/file.name").

Вы также можете, конечно, предоставить любой другой допустимый URI, файл или jar URI.

+0

Heres my full method public static void playSong() String test = getClass(). GetResource ("test2.mp3"). ToURI(). ToString(); Медиа x = новый носитель (тест); MediaPlayer mediaPlayer = новый MediaPlayer (x); mediaPlayer.play(); } В getClass() он дает ошибку Невозможно сделать статическую ссылку на нестатический метод getClass() из типа Object. Я поместил файл test2.mp3 в тот же пакет, что и мой класс Sound (класс, который содержит этот метод). Извините за этот странный комментарий. Я новичок на этом сайте –

+0

Ну, если вы в статическом контексте, не используйте 'getClass()', а 'YourClassName.class' вместо этого. – Vampire

+0

Спасибо за помощь, это сработало. Для тех, кто рассматривает это и проблема с инициализацией Toolkit, обратитесь к этому: http://tech.chitgoks.com/2013/05/11/how-to-fix-toolkit-not-initialized-error-in- java-fx/# comment-9240 И для тех, у кого проблемы с отключением MediaPlayer через 5 секунд, обратитесь к этому: http://stackoverflow.com/questions/6241687/mediaplayer-stop-playing-after-about-5- секунд –