我知道这个问题之前已经被问了很多次,但是我已经通过所有其他线程并尝试了一些东西,但找不到能解决我问题的任何东西。我有一个在Eclipse中编译和运行没有问题的程序,但是当我导出一个可运行的.jar文件时,它不会启动。我尝试从cmd提示符运行它,并收到错误Illegal Argument Exception: URI in not hierarchical
。这发生在包含的声音文件中,我将其作为类路径资源。代码是这样的:
try {
pop = new File(IntroView.class.getResource("/model/pop.wav")
.toURI());
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
从我所读到的内容来看,文件被打包到.jar中的方式存在问题,但是我很难绕过它。任何人都可以对此有所了解并可能提供解决方案吗?感谢。
答案 0 :(得分:0)
我很抱歉,但似乎你不能代表JAR内部的File对象。使用File对象查找文件时,它仅检查OS目录结构中的文件。 File对象可以在目录中找到JAR本身,但不能找到里面的内容。
您可以将InputStream放到JAR中的文件中,如下所示:
InputStream input = PlaySound.class.getResourceAsStream("Kalimba.mp3");
您可以选择以下选项:
答案 1 :(得分:0)
好吧所以我让它运转起来,但它并不是一个理想的解决方案。我最终做的是在项目中创建一个文件夹,但在源代码之外。所以以前,资源都在
Project/src/Model/pop.wav
现在他们在
Project/Resources/pop.wav
然后我就这样访问了
pop = new File("Resources/pop.wav");
因此,它仍然只能在从IDE启动时工作,但我所做的是在运行.jar
的同一文件夹中添加一个新文件夹,其中包含所有相同的资源文件。文件引用相对于程序(来自pop.wav
的IDE中)的任何目录查找.jar
,因此它在此新文件夹中找到文件并且工作正常。我觉得它不是最漂亮的解决方案,但它无论如何都有效。