簡體   English   中英

聲音會在 Eclipse 中播放,但不會在導出的 jar 文件中播放

[英]sound will play in eclipse but not in exported jar file

運行 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() 時沒有運行它。 所以我加載文件的方式與可運行的 jars 不兼容。

編輯:我覺得我加載的音頻錯誤,因此我粘貼了用於加載文件的代碼。在我的搜索中,我沒有看到任何人使用 File 加載聲音文件。 想知道這是不是問題?

- 也切換到嵌入式資源也不起作用。

您的聲音沒有播放的原因是因為它很可能沒有被編譯到您的可運行 jar 中,因此無法找到。 將其編譯為可運行 jar 的最佳方法是在 eclipse 中創建一個源文件夾,然后在其中添加您的聲音文件。 然后它會被編譯到你的 jar 中

我也為此苦苦掙扎。 你需要使用

getClass().getSystemResource("pathToResourceFromClass")

例如,如果您的項目結構如下所示:

-項目名

-----src

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

- - -圖片

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

然后從 SomeClass.java,你會使用

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

獲取引用該文件的URL對象。 如果需要,您可以將該URL對象傳遞給ImageIcon的構造函數。

請注意getClass().getResource()不適用於 jar 文件中的圖像或聲音文件!!! 我在這上面花了很多時間,但getResource()不起作用。 您必須對 jar 文件中的資源使用getSystemResource(..)

如果您對此有任何疑問,請告訴我。 我很樂意澄清任何令人困惑的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM