我正在使用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
时,框架会关闭,但声音仍然没有结束......
如何完全关闭视频播放器框架?
答案 0 :(得分:2)
JFrame.DO_NOTHING_ON_CLOSE
。按如下方式添加WindowListener
(根据需要调整代码):
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.getMediaPlayer().stop(); // Very important!
frame.dispose();
}
});
可能需要声明frame
& mediaPlayerComponent
为final
,以便从内部类中访问它们。
答案 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();
}
});