我正在使用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);
}
你能詳細說明你的jar包嗎? (我的意思是,在解壓縮的罐子上有一棵「樹」) – Riduidel 2011-04-28 08:03:21
@Riduidel我加了一些細節。 – ubiquibacon 2011-04-28 08:25:57