2

実行可能なjarファイル内でAVIを開こうとしましたが、見つけた唯一の解決策は、FileOutputStreamを使用して一時ファイルにコピーを作成することです:

InputStream inputStream = getClass().getResourceAsStream(filePathInJar);
int read = 0;
byte[] bytes = new byte[1024];
this.file = new File("c:\\tmpfile.avi");
OutputStream out = new FileOutputStream(file);
while ((read = inputStream.read(bytes)) != -1) {
    out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();

そして、私は作ることができます:

mediaPlayer = Manager.createRealizedPlayer(new File("c:\\tmpfile.avi").toURI().toURL());

最初の質問: より良い解決策はありますか?

したがって、このソリューションでは、彼の使用の最後に一時ファイルを削除し、試しました:

mediaPlayer.stop();
mediaPlayer.close();
mediaPlayer.deallocate();
file.delete()

しかし、削除は機能しません。プレーヤーで常に使用されているようです...

2 番目の質問: 一時ファイルの使用を停止したり、強制的に削除したりするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

1

私はこれを試していませんが、 を 使用してリソースの URL を取得し、それを使用して へのパラメータとして使用するgetClass().getResource(filePathInJar)を構築できます。何かのようなもの:MediaLocatorcreateRealizedPlayer()

URL url = getClass().getResource(filePathInJar);
MediaLocator locator = new MediaLocator(url);
mediaPlayer = Manager.createRealizedPlayer(locator);

編集: MediaLocator が jar:file:/ url を処理できないことを確認しました。あなたには2つの選択肢があるように私には思えます:

  1. カスタムの InputStream ベースの DataSource を検索または作成します。http://www.extollit.com/isdsjmf.phpのページには、機能するページがあると主張されています。私はそれを試していません。

  2. メディア ファイルを jar から一時ファイルにコピーし、file:// url を使用します。File.createTempFile() と File.deleteOnExit() を使用して、ファイルを削除するという問題を解決できると思います

于 2012-09-16T23:55:18.363 に答える