Java 发布后销毁mediaPlayerComponent(真)

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

使用vlcj和java: 从类a中的类B(EmbeddedMediaPlayerComponent类)创建实例:

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(),可能会泄漏本机资源。