【问题标题】:Using audio from resources in a jar file在 jar 文件中使用资源中的音频
【发布时间】:2013-09-14 13:53:48
【问题描述】:

我已经设法使资源最终进入 jar,方法是使用带有 inputstream 的类从类中获取资源,并将图像和声音添加到 eclipse 中项目目录中的文件夹中,并将其添加到构建路径中。

有了这个图像最终从 jar 中运行。当您单击运行时,使用 AudioinputStream 而不是 image.io 的相同代码在 ide 中工作。

但是从jar文件中没有声音。

这是有问题的代码

AudioInputStream audioIntStream = AudioSystem.getAudioInputStream(              
Resourceloader.load("images/engine.wav")); 
Clip clip = AudioSystem.getClip(); 
clip.open(audioIntStream); 
clip.loop(Clip.LOOP_CONTINUOUSLY);

title = ImageIO.read(Resourceloader.load("images/title.png") );

从 ide 和 jar 读取同一目录中的图像文件,而如上所述,音频文件仅从 ide 而不是 jar 中运行,但 jar 包含音频文件

【问题讨论】:

  • 附带说明一下,声音在“图像”目录中是不是很奇怪?无论如何,您是否检查过 jar 文件是否包含 wav 文件?如果你使用 getResourceAsStream() 代替 Resourceloader 怎么样?

标签: java eclipse audio jar


【解决方案1】:

Java 中的资源加载可能很复杂。但是,以下代码 sn-p 几乎总是您想要的:

Thread.currentThread().getContextClassLoader.getResourceAsStream(
  "path/to/resource/from/jar/root.file");

我经常使用那个 sn-p,以至于我可以在睡梦中输入它。我会调整您上面的代码以使用它来加载您的资源。但是,如果这不能解决问题,我会研究以下内容:

  1. 加载后检查资源,如果是null则抛出异常。
  2. 将 JAR 作为 ZIP 文件打开,并确保资源实际上位于代码中列出的路径中,从 JAR 的根目录开始。
  3. 使用 Ant 或 Maven 构建您的 JAR,而不是 Eclipse 的 GUI。这将有助于确保您的 JAR 始终以相同的方式构建,并减少手动错误的机会。强烈建议使用 Maven 和标准 Maven src/main/resources/ 目录。

【讨论】:

  • 试过 AudioInputStream audioIntStream2 = AudioSystem.getAudioInputStream(Thread.currentThread().getContextClassLoader.getResourceAsStream("images/engine.wav")); gpt 找不到变量 getContextClassLoader 位置线程警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
相关资源
最近更新 更多