私はNetbeansを使用しており、すべてのライブラリ、音楽、画像などを1つのJARファイルに入れて配布する方法を見つけようとしています。ライブラリを理解していると思いますが、オーディオや画像などのファイルが問題になっています。
現在のプロジェクトには、JARファイルにも埋め込みたいオーディオファイルがあります。最初に試しone-jar
ましたが、数時間後にあきらめました。オーディオファイルをJARファイルにうまく入れましたが、プログラムからアクセスできません。ここでgetResourceAsStream
提案されているように使用する必要があることはわかっていますが、入力ストリームを取得した後、何をするのかわかりません。それを機能させるために私が見ることができる唯一の方法は、を使用してまったく新しいファイルを作成することです(以下を参照してください...そしてそれは機能します)が、新しいファイルを作成することは無駄のようです(そして私は人々にプログラムの実行中にオーディオファイルが表示されるのを確認してください)。 オーディオファイルがまだファイルに含まれている間に、オーディオファイルに直接アクセスする方法はありませんか?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。)クラスファイルの直接の親であるパッケージと、を含む「audio」というフォルダ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);
}