2015-08-16 2 views
0

У меня проблема, и я надеюсь, что вы можете мне помочь. Некоторые говорят о том, что я делаю, чтобы вы знали, что происходит. Поэтому на данный момент я пытаюсь запрограммировать небольшое программное обеспечение, которое может воспроизводить мне некоторые музыкальные файлы (точнее, файлы 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

+0

Я вижу 'MP3.jar!' в FileNotFoundExcep Тион. Является ли фактическое имя файла? –

+1

Ресурсы не являются файлами и не работают с FileInputStream или большинством API-интерфейсов, связанных с файлами. Либо извлеките ресурс из банки, а затем используйте FileInputStream в отдельном файле или просто всегда используйте getResourceAsStream() напрямую. – WillShackleford

+0

@ILikeTau да, вы правы, есть «!» в имени файла и не является фактическим именем файла. Но я уже пытался удалить «!» прежде чем я буду использовать строку дальше, но это не решило мои проблемы. – xXKnightRiderXx

ответ

0

Я предполагаю, что у вас есть 2 пакет 1 является ЦСИ, где ваши файлы .java находится и другие ресурсы, где ваши звуковые файлы расположен

Так я предлагаю вам использовать

MP3.play(getClass().getResourceAsStream("/angel.mp3")); 

Поскольку GetResource() автоматически находит ресурсный пакет

Смежные вопросы