【问题标题】:Jar file not working (filenotfoundexception when running in cmd)Jar 文件不工作(在 cmd 中运行时出现 filenotfoundexception)
【发布时间】:2017-09-11 17:15:15
【问题描述】:

我知道这个话题已经出现了很多次,在解决方案之后我一直在研究 stackoverflow 几个小时,但仍然无法正常工作。从 Eclipse 导出可运行的 jar 文件时,我无法使我的 jar 文件工作。当我运行该程序时,该程序在 Eclipse 中运行良好,但是当我尝试打开 jar 文件时,屏幕会变黑一秒钟,然后什么也没有发生。我尝试使用 java -jar nameofile.jar 在命令中打开它,并且有 filenotfoundexception。当我尝试运行它时,这就是它在 cmd 中的样子。

有人有什么建议吗? 谢谢

【问题讨论】:

  • 你用什么来构建你的 jar?
  • 从 Eclipse 我使用导出 -> 可运行的 jar 文件
  • 尝试过“将需要的库打包到生成的jar”和“将需要的库提取到生成的jar”
  • 我认为它抱怨文件夹“songwavs”下的静态资源,你能用一些 .zip 应用程序(如 winzip、7zip 等)打开你的 jar 并检查它们是否存在于你的 jar 中吗?
  • 我马上试试,等一下

标签: java eclipse jar


【解决方案1】:

问题在于你如何获得资源。

你把你的 wav 文件放在src 文件夹中,然后尝试使用 FileInputStream 获取它们,这是行不通的。

如果您将文件放入 jar 中,您应该通过以下方式访问它们:

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);
}

在某些情况下,您需要像这样使用 Thread 类加载器:

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

然后,您可以在从 eclipse 或 jar 运行时读取您的文件。

关于如何打包和部署应用程序还有很多话要说,但这只是一个开始。

【讨论】:

  • 好的。但是几乎没有更改程序,而是有一个导出 jar 文件选项“将所需的库复制到生成的 jar 文件旁边的子文件夹中”,也许这可以工作?
  • 不,它不会,因为 FileInputStream 读取文件,而 jar 文件中的条目不是文件,您应该将您的 src 目录与您的应用程序一起部署,并将其放在工作目录中当您运行应用程序时。
  • 好的。谢谢您的帮助!今晚要用 LoadFile.class.getResourceAsStream("/songwavs/s1_..._.wav"); 改变我的程序看看它是否有效。我今晚晚些时候回来
  • 您的帮助使该程序在 Eclipse 之外运行。非常感谢
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多