Java 停止JFX嵌入式YouTube视频

Java 停止JFX嵌入式YouTube视频,java,swing,javafx,Java,Swing,Javafx,我有一个JPanel组件,其中包含一个JFXPanel和一个嵌入YouTube视频的浏览器。我正在使用YouTube上的视频嵌入URL(即) 我可以将JPanel(VideoPlayer)添加到周围的组件中,而不会出现任何问题。然而,当我移除视频播放器时,我也想停止YouTube播放器。从现在起,它一直在后台播放(带有恼人的声音)。我猜我必须以某种方式进入JFX线程。。。因此,如果有人能帮我把代码放到stoptraile()方法中,我将非常感激 这是我目前的密码。对于那些正在寻找在普通JPane

我有一个JPanel组件,其中包含一个JFXPanel和一个嵌入YouTube视频的浏览器。我正在使用YouTube上的视频嵌入URL(即)

我可以将JPanel(
VideoPlayer
)添加到周围的组件中,而不会出现任何问题。然而,当我移除视频播放器时,我也想停止YouTube播放器。从现在起,它一直在后台播放(带有恼人的声音)。我猜我必须以某种方式进入JFX线程。。。因此,如果有人能帮我把代码放到
stoptraile()
方法中,我将非常感激

这是我目前的密码。对于那些正在寻找在普通JPanel中嵌入JFX YouTube播放器的简单方法的人来说-这非常有效-显然是由于上述限制

public class VideoPlayer extends JPanel {  
private Stage stage;
private WebView browser;
private JFXPanel jfxPanel;
private WebEngine webEngine;
private String videoUrl;

public VideoPlayer(String url){ 
    this.videoUrl = url;
    jfxPanel = new JFXPanel();
    createScene();
    setLayout(new BorderLayout());
    setPreferredSize(new Dimension(800, 560));
    add(jfxPanel, BorderLayout.CENTER);
}  
private void createScene() {    
    PlatformImpl.startup(new Runnable() {
        @Override
        public void run() {
            stage = new Stage();

            stage.setTitle("Video");
            stage.setResizable(true);

            Group root = new Group();
            Scene scene = new Scene(root,80,20);
            stage.setScene(scene);
            //Set up the embedded browser:
            browser = new WebView();
            webEngine = browser.getEngine();
            webEngine.load(videoUrl);

            ObservableList<Node> children = root.getChildren();
            children.add(browser);                     

            jfxPanel.setScene(scene);  
        }
    });
}

public void stopTrailer() {

}
}
公共类视频播放器扩展JPanel{
私人舞台;
私有网络视图浏览器;
私人JFXPanel JFXPanel;
私有网络引擎;
私有字符串videoUrl;
公共视频播放器(字符串url){
this.videoUrl=url;
jfxPanel=新的jfxPanel();
createScene();
setLayout(新的BorderLayout());
setPreferredSize(新尺寸(800560));
添加(jfxPanel,BorderLayout.CENTER);
}  
私有void createScene(){
PlatformImpl.startup(新的可运行(){
@凌驾
公开募捐{
阶段=新阶段();
舞台。片名(“视频”);
stage.setresizeable(true);
组根=新组();
场景=新场景(根,80,20);
舞台场景;
//设置嵌入式浏览器:
browser=新的WebView();
webEngine=browser.getEngine();
webEngine.load(videoUrl);
ObservableList children=root.getChildren();
添加(浏览器);
jfxPanel.setScene(场景);
}
});
}
公共拖车(){
}
}

这个问题的答案其实很简单。我在stoptraile方法中添加了以下内容

public void stopTrailer() { 
    PlatformImpl.startup(new Runnable() {
        @Override
        public void run() {
            remove(jfxPanel);
            webEngine.load(null);
        }
    });
}
它实际上是将浏览器
webEngine
重新加载到“address”null。并移除面板。这对我来说似乎有点奇怪,因为我会将这段代码解释为第二个线程的开始,而不访问第一个线程。也许有人能解释一下这是怎么回事