2017-04-22 105 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. 聲明關閉操作爲JFrame.DO_NOTHING_ON_CLOSE
  2. 添加WindowListener如下(根據需要適應你的代碼):

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

它可能會需要聲明frame & mediaPlayerComponentfinal爲了從一個內部類中訪問它們。

+0

謝謝,它工作 –

0

使用JFrame.EXIT_ON_CLOSE

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

退出應用程序默認窗口關閉操作。如果一個窗口具有此設置作爲關閉操作並且在applet中關閉,則可能會拋出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

這只是說使用DISPOSE_ON_CLOSE代替EXIT_ON_CLOSE –