我有一个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() {
}
}
答案 0 :(得分:0)
答案实际上非常简单。我在stopTrailer方法中添加了以下内容。
public void stopTrailer() {
PlatformImpl.startup(new Runnable() {
@Override
public void run() {
remove(jfxPanel);
webEngine.load(null);
}
});
}
它实际上做的是将浏览器webEngine
重新加载到&#34;地址&#34;空值。并删除面板。这对我来说似乎有点奇怪,因为我会将此代码解释为第二个线程的开头 - 无法访问第一个线程。也许有人可以解释它是如何工作的?