2015-08-16 93 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(); 
    } 

} 

正如你可以看到我得到的路径名称的字符串和重构他,所以我可以播放文件。我打电话的功能,用下面的代码(音乐文件被保存在ressources包):

MP3.play(getClass().getResource("/ressources/angel.mp3").getPath()) 

所以,如果我开始通过Netbeans的一切PROGRAMM工作完全正常。但是,如果我创建一个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。从jar中提取资源,然后在单独的文件上使用FileInputStream,或者直接直接使用getResourceAsStream()。 – WillShackleford

+0

@ILikeTau是啊你是对的有一个“!”在文件名中,这不是文件的实际名称。但我已经尝试删除“!”在我进一步使用字符串之前,但这并没有解决我的问题。 – xXKnightRiderXx

回答

0

我假设你有2包1为src在您的.java文件所在等是你的声音文件位于

所以资源我建议你使用

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

由于占用资源()自动查找资源包