1

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

随着这个图像最终从罐子内运行。当您单击运行时,使用 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 包含音频文件

4

1 回答 1

1

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

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

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

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