現在、JavaFX MediaPlayerでファイルを再生できるかどうかを確認する方法は、内部的に行われるためです。JavaFX MediaPlayerがファイルを再生できるかどうかを確認する正しい方法
import static com.sun.media.jfxmedia.MediaManager.canPlayContentType;
import static com.sun.media.jfxmediaimpl.MediaUtils.filenameToContentType;
public boolean isPlayable(String filename) {
return canPlayContentType(filenameToContentType(filename));
}
これらのメソッドを含むパッケージは「APIではなく、Java 9ではアクセスできない」という問題があります。私は回避策があることを知っていますが、実際にこれを行う、将来的に正しい方法が正しいかどうか疑問です。
私はこの方法では、ディレクトリ内のすべての再生可能なコンテンツでライブラリを移入します:
Files.find(folderPath, Integer.MAX_VALUE, (path, attr) ->
attr.isRegularFile() && isPlayable(path.toFile().getName()))
.forEach(path -> addSong(path));
ええ、私はすでに例外をキャッチすることがこれを処理するための好ましい方法であるとは思わないけれども、それについてもう少し考えました。今では、いくつかのインスタンスで最大40,000になるオブジェクトライブラリ全体を格納するので、ファイルオブジェクトまたはメディアオブジェクトのメモリフットプリントが大きいかどうかは疑問です。 – Xerus
私は今大きな問題に遭遇しました。メディアオブジェクトは対応するファイルをロックします。その後に直接タグを読み取ることができなくなります。 – Xerus
@Xerusは最終的な実装が何になったのかわかりません。それは別の質問です(間接的に関連する質問を避けるようにと頼んでいます)。 – nullpointer