【问题标题】:Java - Sound plays in Eclipse but not .jarJava - 声音在 Eclipse 中播放,但不是 .jar
【发布时间】:2014-03-10 05:45:40
【问题描述】:

我一直在学习如何在应用程序中使用声音,一切正常。但是当我将项目导出到一个可执行的 .jar 时,一切都变得糟糕了......

基本上,当应用程序加载时,窗口会打开,但它是空白的,没有加载任何内容。当我从应用程序中删除声音时,它在导出等时工作。

我在网上获得了以下代码,并对其进行了一些修改以满足我的需要。这看起来很简单,但由于某种原因它不起作用。正如我所说,在我的 ide(Eclipse) 中,当我运行它时,ecerything 工作正常......

我使用 WinRAR 和 'jar tf' 来检查文件是否与 .jar 捆绑在一起。

当我从命令行运行时,我得到一个 NullPointerException

java.lang.NullPointerException
        at mr.myapp.Sound.loop(Sound.jav
        at mr.myapp.GameComponent.run(Ga
        at java.lang.Thread.run(Unknown Source)

这里是代码

package mr.myapp.Sound;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip; 



public class Sound {

    public static Sound main_menu = loadSound("/test.wav");
    public static Sound game = loadSound("/song12.wav");
    public static Sound shoot = loadSound("/shoot.wav");
    public static Sound hit = loadSound("/hit.wav");
    public static Sound fail = loadSound("/fail.WAV");

    private Clip clip;

    public static Sound loadSound(String fileName) {
        Sound sound = new Sound();
        try {
            //AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResource(fileName));
            AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(fileName));
            Clip clip = AudioSystem.getClip();
            clip.open(ais);
            sound.clip = clip;
        } catch (Exception e) {
            System.out.println(e);
        }
        return sound;
    }

    public void play(){
        if(clip == null) return;
        stop();
        clip.setFramePosition(0);
        clip.start();
    }

    public void stop(){
        if(clip.isRunning()) clip.stop();
    }

    public void close(){
        stop();
        clip.close();
    }

    public void loop(){
        clip.loop(Clip.LOOP_CONTINUOUSLY);
     }

    public boolean isActive(){
        return clip.isActive();
     }
}

【问题讨论】:

  • 哪一行抛出异常?
  • AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(fileName));

标签: java eclipse audio jar


【解决方案1】:

我猜它正在尝试从 .jar 文件加载到的本地临时目录中加载文件,而不是从存档本身中加载文件。

您想要做的是从存档中加载资源,您可以使用java.lang.Class.getResourceAsStream(String) 函数来执行此操作。 Here 的另一个问题讨论了这类事情。

【讨论】:

  • 哇哦。我将声音文件复制到与 jar 相同的位置,它可以工作。在我的原始代码中,我使用了 getResourceAsStream(fileName) 而不是 getResource(fileName) 但它没有改变任何东西
【解决方案2】:

我想通了。我的声音文件是 .WAV 而不是我放入声音类的 .wav。

我还必须使用 getResource 而不是 getResourceAsStream

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多