2

运行 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() 时没有运行它。所以我加载文件的方式与可运行的 jar 不兼容。

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

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

4

2 回答 2

2

我也为此苦苦挣扎。你需要使用

getClass().getSystemResource("pathToResourceFromClass")

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

-项目名称

-----src

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

- - -图片

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

然后从 SomeClass.java,你会使用

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

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

请注意,这getClass().getResource() 不适用于 jar 文件中的图像或声音文件!!! 我花了很多时间在这上面,getResource()但没有工作。您必须使用getSystemResource(..)jar 文件中的资源。

如果您对此有任何疑问,请告诉我。我很乐意澄清任何令人困惑的地方。

于 2013-12-08T09:11:19.360 回答
2

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

于 2013-08-01T03:40:00.950 回答