Media Javadocから
HTTP、FILE、および JAR URL のみがサポートされています。指定された URL が無効な場合、例外がスローされます。非同期エラーが発生した場合、エラー プロパティが設定されます。このプロパティをリッスンして、そのようなエラーが通知されるようにします。
私は個人的にJavaFXに精通していませんが、厄介なハックに頼らなければ、メディアをメモリから直接読み取ることができないことを示唆しています. 通常、この種の URI のみのインターフェイスでは、カスタムUrlStreamHandlerとメモリから読み取るカスタム プロトコルを登録することをお勧めします。ただし、JavaDoc が正しいと仮定すると、JavaFX は独自の解像度を使用するため、おそらくこれは機能しません。
これを考えると、これを機能させる唯一の方法は、HTTP 経由でインメモリ MP3 へのアクセスを提供することだと思います。これは、 Jettyまたは同様の組み込み可能なサーブレット コンテナーを使用して行うことができます。次の行に沿ったもの:
1)クイック スタート ガイドに従って Jetty を起動します。
2) 以下のようなサーブレットを登録します。このサーブレットは、メモリ内データを公開します。
public class MagicAccessServlet extends HttpServlet {
private static final Map<String, byte[]> mediaMap = new ConcurrentHashMap();
public static String registerMedia(byte[] media) {
String key = UUID.randomUUID().toString();
mediaMap.put(key, media);
return key;
}
public static deregisterMedia(String key) {
mediaMap.remove(key);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
String key = req.get("key");
byte[] media = mediaMap.get(key);
resp.setContentLength(media.length);
resp.getOutputStream().write(media);
}
}
次に、http url を使用してアプリケーション内からアクセスできます。たとえば、次のようなもの
MagicAccessServlet.registerMedia(decodedMp3);
new MediaPlayer(new Media("http://localhost:<port>/<context>/<servlet>?key=" + key)).play();