2017-04-15 89 views
0

我知道这个话题已经了很多次,sollution后,我一直在寻找计算器几个小时,但仍然没有工作。从Eclipse中导出可运行的jar文件时,我无法使我的jar文件工作。当我运行它时,该程序在Eclipse中完美工作,但是当我尝试打开jar文件时,屏幕会变黑,然后没有任何反应。我尝试用java -jar nameoffile.jar命令打开它,并且有filenotfoundexception。这是它在我尝试运行它时在cmd中看起来像的样子。Jar文件不工作(在cmd中运行时,FileNotFoundException异常)

有没有人有任何建议? 感谢

enter image description here

+0

你用什么来建立你的jar? – ProgrammerBoy

+0

从日食我用出口 - >运行的JAR文件 –

+0

曾经尝试都“包所需的库到生成的JAR”和“提取所需的库到生成的JAR” –

回答

1

的问题是你如何让你的资源。

你把你的wav文件中src文件夹中的尝试使用的FileInputStream,这是行不通的得到它们。

如果你把你的文件放进瓶子里,你应该访问它们通过量:

getClass().getResourceAsStream(filepath)

这样的事情。

public class LoadFile { 
    public static void main(String[] args) throws Exception { 
     InputStream stream = 
      LoadFile.class.getResourceAsStream("/songwavs/s1_..._.wav"); 
      AudioSystem.getAudioFileFormat(stream); 
      AudioSystem.getAudioFileFormat(url); 
    } 
} 

这只是一个例子,关键是作为jar中的资源,ClassLoaders是获取它的工具。

所以,非静态方法里面可以使用:

public void myMethod() throws Exception{ 
    InputStream stream = getClass().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

在某些情况下的,你需要使用线程的类加载器是这样的:

public void myMethod2() throws Exception{ 
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

然后你可以把阅读您的文件无论是从eclipse运行还是从jar运行。

更可以说如何打包应用程序和部署它,但是这仅仅是一个开始。

+0

好的。但不改变程序,很多代码都有一个导出jar文件选择“将所需的库复制到生成的jar文件旁边的子文件夹中”,也许可以工作? –

+0

不,不会,beacaue的FileInputStream读取文件,而在一个jar文件中的条目不是一个文件,你应该用你的应用程序一起部署你的src目录,并把它的工作目录里面,当你运行应用程序。 – minus

+0

好的。谢谢您的帮助!今晚要使用LoadFile.class改变我的程序。的getResourceAsStream( “/ songwavs/S1 _..._ WAV”);并看看它是否有效。我今晚晚些时候回来 –

相关问题