3

ビデオを再生するために、EclipseRCPアプリケーションのエディターでJavaFXを使用しています。エディターUIの初期化中に、次のように実行します。

canvas = new FXCanvas(imageSection, SWT.NONE);
canvas.setScene(createScene());
...
// createScene()
Media media = new Media(file.toURI().toString());
MediaPlayer player = new MediaPlayer(media);
MediaView view = new MediaView(player);
...
player.play();

エディターのdisposeメソッドでは、ビデオの再生が停止することを確認します。

@Override
public void dispose() {
    player.stop();
    super.dispose();
}

ただし、エディターを閉じた後に(自分のアプリケーションまたはWindowsエクスプローラーの両方から)エディターで再生していたビデオリソースを削除したい場合、ファイルはまだアプリケーションで使用されているため、削除できません。fxのMediaオブジェクトがビデオリソースをリリースしたことがないようです。エディターを閉じたときにMediaまたはMediaPlayerオブジェクトにリソースを解放するように要求するポインターがjavafxドキュメントに見つかりません。

私の質問:エディターを閉じたときにjavafxがビデオファイルをリリースすることを確認するにはどうすればよいですか?

4

4 に答える 4

1

ちょうど同じ問題があり、たくさん読んだ後、私はこの投稿を見つけました(https://bugs.openjdk.java.net/browse/JDK-8123986)。最後のアドバイスの1つは、MediaPlayerオブジェクトでdispose()を使用することです。これは私にとっては問題なく機能しました。

オーディオの再生後にファイルを確実にリリースする必要がある場合は、次のようにすることができます。

File recording = new File("recording.mp3");
Media media = new Media(recording.toURI().toString());
final MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
mediaPlayer.setOnEndOfMedia(new Runnable() {
    @Override
    public void run() {
        mediaPlayer.dispose();
    }
});
于 2016-06-03T07:06:12.463 に答える
0

同じ(または同様の)問題が発生しました。私の場合、スタンドアロンのJavaSwingデスクトップアプリケーション内でJavaFXMediaPlayerを使用しています。JRE1.7.0_10とJavaFx2.2.4-b18を使用しています。アプリケーションはWindowsマシンで実行されます。私の場合、再生後に一部のメディアファイルを削除する必要がある場合があります。たまたまFiles.delete()メソッドを使用しています。「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というメッセージとともにIOExceptionを常にスローしますが、最後に再生されたファイルに対してのみスローします。削除を試みる前に、メディアプレーヤーでstop()を呼び出していることを確認しています。

また、CarlDeaの著書「JavaFX2.0Introduction by Example」のPlayingAudioの例(第3-1章)で、停止ボタンのイベントハンドラーのメディアのFileオブジェクトでdelete()を呼び出すようにこの例を変更して、このシナリオを再現しました。繰り返しになりますが、メディアプレーヤーを停止した後、必ずdeleteを呼び出します。(この例は純粋にJavaFXであり、Swingはありません。)

価値があるのは、Swingアプリケーションでこれを回避する方法は、前述のIOExceptionをスローしたファイルに対してdeleteOnExit()を呼び出すことでした。それでも、アプリケーションを終了するときに、最初にPlatform.exit()を呼び出したが、それがないとdeleteOnExit()も機能しないことを確認する必要がありました。

これがお役に立てば幸いです。

于 2013-01-23T19:58:23.480 に答える
0

その価値について、私はJavaFXフォーラムに質問を投稿しました。それに応じて、私はこのJiraチケットを指摘されました:http: //javafx-jira.kenai.com/browse/RT-18224

チケットの提案は私の状況を助けなかったので、私は回避策で立ち往生しています。

于 2013-01-25T13:28:58.517 に答える
0

アプリケーションに多くのファイルをロードし、スライダーを使用してseek()を呼び出すと、ファイルの数が増えるとアプリケーションのパフォーマンスが低下し、OSのメモリグラフにメモリの増加率が表示されます。JavaFxのメモリリークが発生しているように見えます。メディアの問題で。今、別のバグがあります:https ://javafx-jira.kenai.com/browse/RT-28379

于 2014-05-22T00:04:55.790 に答える