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

Posted

技术标签:

【中文标题】声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放【英文标题】:sound will play in eclipse but not in exported jar file 【发布时间】:2013-08-01 03:30:55 【问题描述】:

运行 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 加载声音文件。不知道是不是这个问题?

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

【问题讨论】:

显而易见的问题:jar 是否包含声音文件? 根据 Jar 文件的当前执行上下文,文件似乎正在从文件系统加载。两条路径可能不一样。考虑改用嵌入式资源 【参考方案1】:

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

【讨论】:

它肯定可以找到文件,因为没有抛出fileNotFound异常。 尝试用 WINRAR 打开你的可运行 jar,看看它是否在里面 文件是从 jar 外部加载的。不在里面。【参考方案2】:

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

getClass().getSystemResource("pathToResourceFromClass")

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

-项目名称

-----src

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

-----图片

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

然后从 SomeClass.java,你会使用

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

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

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

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

【讨论】:

以上是关于声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 不会播放声音,但可以在其他浏览器中使用

声音在带断点的 iphone 模拟器中播放,但没有断点无法播放

SpriteKit:播放前将声音文件预加载到内存中?

声音不会一直播放! - Pygame,Python

Android - VideoView 不会播放有声视频

没有播放声音