2011-04-28 40 views
0

我正在使用Netbeans,並且試圖弄清楚如何將所有的庫,音樂,圖像等放入一個JAR文件中分配。我想我已經找到了這些庫,但音頻,圖像和其他這些文件給我帶來了麻煩。在一個JAR文件中包含Java程序的所有庫,音頻等

在我當前的項目中,我有一個音頻文件,我也想將它嵌入到JAR文件中。首先,我嘗試one-jar,但幾個小時後,我放棄了它。我把音頻文件放入JAR文件中,但我無法從我的程序中訪問它。我知道我需要使用getResourceAsStream作爲建議here但我不清楚我得到輸入流後做了什麼。我可以看到使其工作的唯一方法是使用InputStream並創建一個全新的文件(見下文...它的工作原理),但創建一個新的文件看起來像一個浪費(我不希望人們在運行程序時看到音頻文件)。 當文件仍包含在.JAR文件中時,是否無法直接訪問音頻文件?

File file = new File("myAudio.wav"); 
InputStream stream = mypackage.MyApp.class.getResourceAsStream("audio/myAudio.wav"); 
     try { 
      OutputStream out = new FileOutputStream(file); 
      byte buf[] = new byte[1024]; 
      int len; 
      while ((len = inputStream.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
      out.close(); 
      inputStream.close(); 
     } catch (IOException e) { 
     } 

編輯:

我的JAR文件的內部結構包含1)一個庫包(Jama),2。)我的包這是我的類文件和一個直接父節點名爲「音頻」的文件夾,其中包含myAudio.wav和3.)META-INF文件夾,其中包含我的manifest.mf

編輯

音頻流讀這樣的事情。我試圖直接使用InputStream,但我沒有成功。我想再次指出,當我從包含JAR文件的音頻文件的輸入流創建新的音頻文件時,我已經擁有它了,但就像我以前說過的,每次創建一個大音頻文件似乎都很浪費程序在文件已存在於JAR中時運行。這個文件娛樂是我想要避免的。

AudioInputStream stream; 
Clip music; 
     try { 
      stream = AudioSystem.getAudioInputStream(file); 
     } catch (IOException e) { 
     } catch (UnsupportedAudioFileException e) { 
     } 
     try { 
      music = AudioSystem.getClip(); 
     } catch (LineUnavailableException e) { 
     } 
     try { 
      start(); 
     } catch (Exception e) { 
     } 
public void start() throws Exception { 
    music.open((AudioInputStream) stream); 
    music.start(); 
    music.loop(Clip.LOOP_CONTINUOUSLY); 
} 
+0

你能詳細說明你的jar包嗎? (我的意思是,在解壓縮的罐子上有一棵「樹」) – Riduidel 2011-04-28 08:03:21

+0

@Riduidel我加了一些細節。 – ubiquibacon 2011-04-28 08:25:57

回答

3

是不是AudioSystem.getAudioInputStream(stream);適合您?

+0

是的。你先生是男人......不知道我是如何錯過的:) – ubiquibacon 2011-04-28 08:49:50

相關問題