2014-10-20 154 views
1

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

我可以将JPanel(VideoPlayer)添加到周围的组件没有任何问题。但是 - 当我删除VideoPlayer时,我还想停止YouTube播放器。截至目前 - 它一直在后台播放(伴随着烦人的声音)。我想我必须以某种方式进入JFX线程......所以,如果有人可以帮我用代码来输入stopTrailer()方法 - 我会非常感激!

这是我目前的代码。对于那些谁正在寻找一种简单的方式嵌入在一个正常的JPanel一个JFX YouTube播放器 - 从上面的局限性APPART ...

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

} 
} 

回答

0

这个问题的答案其实很简单 - 这个伟大工程。我把下面的内容放在stopTrailer方法中。

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

它实际上做的是将浏览器webEngine重新加载到“地址”null。并移除面板。这对我来说似乎有点不可思议,因为我会将此代码解释为第二个线程的开始 - 无法访问第一个线程。也许有人可以解释这是如何工作的?