2017-04-22 18 views
1

ビデオプレーヤーを作成するためにVLCJバインディングを使用しています。JFrameが完全に閉じない

マイコード:

public class MyVideoPlayer { 

    private EmbeddedMediaPlayerComponent mediaPlayerComponent; 
    static String VLCLIBPATH = "C:\\Program Files\\VideoLAN\\VLC"; 

    public MyVideoPlayer(String source) { 
     NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), VLCLIBPATH); 
     Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); 
     JFrame frame = new JFrame("VLC Player"); 
     mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); 
     frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
     frame.setContentPane(mediaPlayerComponent); 
     frame.setSize(1366, 768); 
     frame.setVisible(true); 
     mediaPlayerComponent.getMediaPlayer().playMedia(source); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
} 

私はnew VideoPlayer(source)で別のフレームからこのビデオプレーヤーを呼び出します。 JFrame.DISPOSE_ON_CLOSEを使用すると、フレームは閉じられますが、サウンドはまだ流れません。

ビデオプレーヤーのフレームを完全に閉じるにはどうしたらいいですか?

答えて

2
  1. としてクローズ操作を宣言。次のよう
  2. WindowListenerを追加します(必要に応じてあなたのコードに適応):

    frame.addWindowListener(new WindowAdapter() { 
        @Override 
        public void windowClosing(WindowEvent e) { 
         mediaPlayerComponent.getMediaPlayer().stop(); // Very important! 
         frame.dispose(); 
        } 
    }); 
    

おそらく内部クラス内からそれらにアクセスするためにfinalとしてframe & mediaPlayerComponentを宣言する必要があります。

+0

ありがとうございました –

0

使用JFrame.EXIT_ON_CLOSE

すなわち

終了するアプリケーションのデフォルトのウィンドウクローズ操作frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);。ウィンドウがクローズ操作としてこのセットを持ち、アプレットで閉じている場合、SecurityExceptionがスローされることがあります。これはアプリケーションでのみ使用することをお勧めします。

https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html#EXIT_ON_CLOSE

あなたはオーディオを停止し、リスナーがメソッドを呼び出すときに

は、windowClosingにリスナーを追加し、アプリケーションを終了しますどの近くに出口を使用したくない場合は

frame.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     System.out.println("Closed"); 
     //Here stop the audio 
     e.getWindow().dispose(); 
    } 
}); 
+0

私がJFrame.EXIT_ON_CLOSEを使用すると、すべてのフレームが閉じ、ビデオプレーヤーフレームを閉じたいだけです。 –

+0

@PrateekKalraこれを確認してください。http://stackoverflow.com/a/1944474/2320144 –

+0

EXIT_ON_CLOSEの代わりにDISPOSE_ON_CLOSEを入力してください –

関連する問題