У меня проблема, и я надеюсь, что вы можете мне помочь. Некоторые говорят о том, что я делаю, чтобы вы знали, что происходит. Поэтому на данный момент я пытаюсь запрограммировать небольшое программное обеспечение, которое может воспроизводить мне некоторые музыкальные файлы (точнее, файлы mp3, поэтому я использую jLayer API). Я работаю с Netbeans, и я успешно импортировал музыкальный файл в проект. Если я создам свою программу и открою полученный файл JAR с помощью программы архива, я могу найти там свой музыкальный файл. Моя функция, которую я использую выглядит следующим образом:Звук не воспроизводится в файле JAR
public static String play(String file) {
File test = new File(file);
try {
FileInputStream in = new FileInputStream(test);
Player pl = new Player(in);
pl.play();
return "success";
}
catch (Exception e) {
return e.toString();
}
}
Как вы можете видеть, я получаю строку с Path Name и реорганизовать его, так что я могу воспроизвести файл. Я вызываю функцию со следующим кодом (музыкальный файл сохраняется в пакете RESSOURCES):
MP3.play(getClass().getResource("/ressources/angel.mp3").getPath())
Так что, если я начну программка через Netbeans все работает прекрасно. Но если я создам файл JAR и запускаю программу, ничего не происходит. Исключение получаю следующее:
java.io.FileNotFoundException: file:\C:\Users\Raphael\Documents\NetBeansProjects\MP3\dist\MP3.jar!\ressources\angel.mp3
Он говорит, что файл не существует, но если я просматриваю JAR файл есть ......
Еще одна странная вещь, которую я узнал, заключается в следующем : Если я использую следующую функцию для воспроизведения музыкального файла:
public static String play(InputStream test) {
try {
Player pl = new Player(test);
pl.play();
return "success";
}
catch (Exception e) {
return e.toString();
}
}
и вызвать функцию со следующим аргументом:
MP3.play(getClass().getResourceAsStream("/ressources/angel.mp3"));
Все работает отлично как в Netbeans, так и в финальном JAR. Может ли кто-нибудь объяснить мне, что я делаю неправильно, и только вторая функция работает в версии JAR?
Было бы очень приятно, если бы вы могли помочь мне в этом вопросе.
Привет, xXKnightRiderXx
Я вижу 'MP3.jar!' в FileNotFoundExcep Тион. Является ли фактическое имя файла? –
Ресурсы не являются файлами и не работают с FileInputStream или большинством API-интерфейсов, связанных с файлами. Либо извлеките ресурс из банки, а затем используйте FileInputStream в отдельном файле или просто всегда используйте getResourceAsStream() напрямую. – WillShackleford
@ILikeTau да, вы правы, есть «!» в имени файла и не является фактическим именем файла. Но я уже пытался удалить «!» прежде чем я буду использовать строку дальше, но это не решило мои проблемы. – xXKnightRiderXx