JFrame并没有完全关闭

时间:2017-04-22 07:57:35

标签: java swing vlc libvlc vlcj

我正在使用VLCJ绑定来创建视频播放器。

我的代码:

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 个答案:

答案 0 :(得分: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();
        }
    });
    
  3. 可能需要声明frame& mediaPlayerComponentfinal,以便从内部类中访问它们。

答案 1 :(得分: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();
    }
});