【问题标题】:Cannot read from an runnable Jar file无法从可运行的 Jar 文件中读取
【发布时间】:2014-01-15 09:13:11
【问题描述】:

我正在尝试制作一个 mp3 播放器,我使用了 javazoom 库。我将 mp3 路径保存在 library.txt 文件中以重新打开它们。打开jar文件中的library.txt没有任何问题。

通常使用 eclipse 程序它运行良好,但是当我创建一个 jar 文件时,问题就开始了。 我的 jar 文件无法使用绝对路径打开任何 mp3 文件。

 File file = new File("/Users/orcungumus/Music/iTunes/iTunes Media/Music/Bruno Mars/Unorthodox Jukebox/1-16 16 Locked Out of Heaven.mp3");
        try {
            player.open(file);
        } catch (BasicPlayerException e1) {
            JOptionPane.showMessageDialog(null, e1.toString(),
                    "Error", JOptionPane.INFORMATION_MESSAGE);
        }

为了让思考更容易理解,我直接使用了文件的路径。它适用于eclipse,但使用jar文件无法打开文件。

这是我犯的错误:

如果很重要,我会使用 mac os。

编辑:通过使 mp3 路径相对,我意识到这与绝对路径无关。库给出有关音频格式的错误。所以,问题依然存在。项目的可运行 jar 文件版本和 eclipse 运行之间有什么区别。

【问题讨论】:

  • 请粘贴完整的异常堆栈跟踪并指出获取异常的代码行
  • File file = new File("mp3.mp3"); try { player.open(file); <--- Error Line } 错误信息:javazoom.jlgui.basicplayer.BasicPlayerException: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file //同样的错误 - 我也试图打开一个不存在的文件;错误不同,它直接说它不存在。 它仍然适用于 eclipse 运行
  • .mp3 是否在 jar 文件中?如果是这样,我相信您需要先提取它才能获取文件,除非您的音频 API 支持使用 JarEntry 类型以及 File 对象。
  • 不,它是一个外部文件。
  • 这很令人困惑。我想知道路径中的空格是否有东西绊倒,您可以尝试像"/tmp/sample.mp3" 这样更简单的路径吗?

标签: java eclipse file jar mp3


【解决方案1】:

嗯,这很难找到。

现在您的问题是无法打开我无法处理的音频文件。

但是你说程序使用eclipse完美运行,所以问题变成了 在eclipse中运行和普通jar文件的区别。

首先,eclipse不直接使用java.exe或者javaw.exe来执行。相反,eclipse 使用一些自定义库来重定向控制台、处理异常等。 (这与您无关)

第二,eclipse会自动为你设置工作目录(到项目根目录),其中可能包含一些必要的原生库。

第三,eclipse还为库的本地位置定义了一些路径,我想你可以使用eclipse内置导出来创建jar文件,但不包含本地库。

第二个和第三个区别可能会对你有所帮助,因为它们对 jar 文件非常有效。 刚刚浏览了一下javazoom,不知道有没有native library。如果不, 很抱歉,您必须找到其他解决方案。

【讨论】:

  • 好的,从你的回答中我了解到这与库有关。(一开始我不认为有 lib 错误,因为异常是 javazoom 异常。 ) 我用 winrar 打开 jar 文件并将其设为文件夹。我看到我的库已经提取,我意识到它们与我并不相似。所以我将导出属性从提取库更改为包库,它现在可以工作了。但是,我仍然对原因感到好奇。谢谢。
  • 嗯,这是关于 java 本地接口 (jni) 的。 jni 最重要的部分是 System.loadLibrary(String),它“注册”(我不知道这个词是否正确)外部库(以 .dll .o ...结尾)类加载器或某些东西,如果路径不正确,则本机库未正确加载,并且该方法也未正确调用。
猜你喜欢
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2013-02-20
  • 2014-06-07
  • 2017-11-08
相关资源
最近更新 更多