停止JFX嵌入式YouTube视频

时间:2014-10-20 19:40:22

标签: java swing javafx

我有一个JPanel组件,其中包含一个嵌入了YouTube视频的浏览器的JFXPanel。我使用YouTube上的视频嵌入网址(即https://www.youtube.com/embed/W-J2OYN9fF8?autoplay=true&controls=0)。

我可以毫无问题地将JPanel(VideoPlayer)添加到周围的组件中。但是 - 当我删除VideoPlayer时,我也想停止YouTube播放器。截至目前 - 它一直在后台播放(有令人讨厌的声音)。我猜测我必须以某种方式进入JFX线程...所以,如果有人可以帮助我使用代码来放入stopTrailer()方法 - 我将非常感激!

这是我目前的代码。对于那些正在寻找一种简单方法将JFX YouTube播放器嵌入普通JPanel中的人来说 - 这很有效 - 从以上限制开始......

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() {

}
}

1 个答案:

答案 0 :(得分:0)

答案实际上非常简单。我在stopTrailer方法中添加了以下内容。

public void stopTrailer() { 
    PlatformImpl.startup(new Runnable() {
        @Override
        public void run() {
            remove(jfxPanel);
            webEngine.load(null);
        }
    });
}

它实际上做的是将浏览器webEngine重新加载到&#34;地址&#34;空值。并删除面板。这对我来说似乎有点奇怪,因为我会将此代码解释为第二个线程的开头 - 无法访问第一个线程。也许有人可以解释它是如何工作的?