Java 停止JFX嵌入式YouTube视频
我有一个JPanel组件,其中包含一个JFXPanel和一个嵌入YouTube视频的浏览器。我正在使用YouTube上的视频嵌入URL(即) 我可以将JPanel(Java 停止JFX嵌入式YouTube视频,java,swing,javafx,Java,Swing,Javafx,我有一个JPanel组件,其中包含一个JFXPanel和一个嵌入YouTube视频的浏览器。我正在使用YouTube上的视频嵌入URL(即) 我可以将JPanel(VideoPlayer)添加到周围的组件中,而不会出现任何问题。然而,当我移除视频播放器时,我也想停止YouTube播放器。从现在起,它一直在后台播放(带有恼人的声音)。我猜我必须以某种方式进入JFX线程。。。因此,如果有人能帮我把代码放到stoptraile()方法中,我将非常感激 这是我目前的密码。对于那些正在寻找在普通JPane
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。并移除面板。这对我来说似乎有点奇怪,因为我会将这段代码解释为第二个线程的开始,而不访问第一个线程。也许有人能解释一下这是怎么回事