Java 发布后销毁mediaPlayerComponent(真)
使用vlcj和java: 从类a中的类B(EmbeddedMediaPlayerComponent类)创建实例:Java 发布后销毁mediaPlayerComponent(真),java,vlcj,Java,Vlcj,使用vlcj和java: 从类a中的类B(EmbeddedMediaPlayerComponent类)创建实例: mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); 通过B类打开:new JFrame,带有ebeded mediaPlayer 我可以通过以下方式销毁此“JFrame”: frame.addWindowListener(new WindowAdapter() { @Override public v
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
通过B类打开:new JFrame
,带有ebeded mediaPlayer
我可以通过以下方式销毁此“JFrame”:
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
stillAlive = false;
release(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public boolean stillAlive() {
return stillAlive;
}
但是类A中的mediaPlayerComponent
仍然存在,如果我尝试重用mediaPlayerComponent
因此,如果我想播放一个新文件,我会这样做。
检查是否是第一次打开实例,并
通过stilllive=false
检查我是否发布了release(true)
。
否则,请重用mediaPlayerComponent
if (mediaPlayerComponent == null || (! mediaPlayerComponent.stillAlive())) { // keine facory
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
mediaPlayerComponent.getMediaPlayer().prepareMedia(marked.getPath());
mediaPlayerComponent.getMediaPlayer().play();
} else {
mediaPlayerComponent.getMediaPlayer().prepareMedia(marked.getPath());
mediaPlayerComponent.getMediaPlayer().play();
}
有更好的方法吗?比如告诉class A设置mediaPlayerComponent=null
。
携带这个布尔值似乎是不好的编码方式。你有没有试过告诉A类设置
mediaPlayerComponent=null
?A类不知道何时通过windowClosing
终止JFrame。我不知道如何从子B调用父A。公共类EmbeddedMediaPlayerComponent扩展面板实现MediaPlayerEventListener{
可能通过接口:?您的问题对我来说不是很清楚,也许一段代码可以更清楚地显示所有内容。总之,对于vlcj,我建议您在应用程序终止之前不要释放媒体播放器。也许这也有助于隐藏您的帧并重新使用,而不是处置它。隐藏并重新使用-使用听起来好多了。如果我在main中使用System.exit(0);
,所有播放器都会关闭,因此不需要release()
。但是使用release()是谨慎的,因为如果不在媒体播放器上调用release(),可能会泄漏本机资源。