2014-10-20 144 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。並移除面板。這對我來說似乎有點不可思議,因爲我會將此代碼解釋爲第二個線程的開始 - 無法訪問第一個線程。也許有人可以解釋這是如何工作的?