声音将在eclipse中播放,但不会在导出的jar文件中播放

时间:2013-08-01 03:30:55

标签: java audio jar clip

当我运行JAR时,声音不会播放,但是当我在eclipse中运行它时会发生声音。

这是我加载剪辑的地方:(文件从jar目录中加载,而不是从jar中加载)

public void init(){
    System.out.println("grabbing Music");
    String currentDir = new File("").getAbsolutePath();
    name=new File(currentDir+"\\music\\").list();
    clip=new Clip[name.length];
    soundFile=new File[name.length];
    for(int x=0;x<name.length;x++){
        System.out.println(currentDir+"\\music\\"+name[x]);
        try {
            soundFile[x]= new File(currentDir+"\\music\\"+name[x]);
            AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile[x]);
            DataLine.Info info= new DataLine.Info(Clip.class, sound.getFormat());
            clip[x] = (Clip) AudioSystem.getLine(info);
            clip[x].open(sound);
            clip[x].addLineListener(new LineListener(){
                public void update(LineEvent event) {
                    if (event.getType() == LineEvent.Type.STOP) {
                        event.getLine().close();
                    }
                }
            });
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        }
    }

}

在Eclipse中运行它时没有任何错误。应该不存在无效的目录错误,所以有什么问题?

- 当jar在CMD中运行时我没有错误也没有堆栈跟踪,因此它正在加载文件,它只是在调用clip.start()时不运行它。所以我加载文件的方式与runnable jar不兼容。

编辑:我觉得我正在加载错误的音频,因此为什么我粘贴了用于加载文件的代码。在我的搜索中,我还没有看到有人使用File加载声音文件。不知道这是不是问题?

- 也切换到嵌入式资源也不起作用。

2 个答案:

答案 0 :(得分:2)

你的声音没有播放的原因,因为它很可能没有被编译到你的可运行的jar中,因此无法找到。将它编译成可运行的jar的最好方法是在eclipse中创建一个源文件夹,然后在那里添加你的声音文件。然后它将被编译到你的jar

答案 1 :(得分:2)

我也在努力解决这个问题。你需要使用

getClass().getSystemResource("pathToResourceFromClass")

例如,如果您的项目结构如下所示:

-ProjectName

----- SRC

---------- SomeClass.java

-----图像

---------- SomeImage.png

然后从SomeClass.java中,您将使用

getClass().getSystemResource("images/SomeImage.png")

获取引用该文件的URL对象。然后,如果需要,您可以将URL对象传递给ImageIcon的构造函数。

请注意,getClass().getResource() 不适用于jar文件中的图片或声音文件!!! 我花了很多时间来处理这个问题,getResource()不起作用。您必须使用getSystemResource(..)来获取jar文件中的资源。

如果您对此有任何疑问,请与我们联系。我很乐意澄清任何令人困惑的问题。

相关问题