关闭后WebView无法再次运行

时间:2014-11-04 11:12:53

标签: java webview javafx

我正在尝试使用WebView实例化许多JFrame,只要打开第一个WebView后,它就会起作用,至少有一个WebView仍处于活动状态,并且JFrame(以及其他所有内容)都没有被处理掉。

经过一些检查后,似乎在关闭所有WebView JFrame之后,Platform.runLater()不再在使用WebViewPanel的JFrame的下一个实例化上运行。

以下是简化代码:

public class WebViewPanel{
    private JFXPanel jfxPanel;
    private WebView view;
    private WebEngine webEngine;
    private JPanel panel;
    public WebViewPanel(JPanel panel){
        this.panel = panel;
        panel.setVisible(true);
        createScene();

    }
    private void createScene(){
        Platform.runLater(new Runnable(){
            @Override
            public void run(){ //Runnable no longer runs after all JFrames with WebViewPanels are closed
                jfxPanel = new JFXPanel();
                view = new WebView();
                webEngine = view.getEngine();
                jfxPanel.setScene(new Scene(view));
                panel.add(jfxPanel);
                jfxPanel.setVisible(true);
            }
        });
    }
}

那么,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是因为如果没有明确设置,平台会自行退出。

这是

后你需要做的事情
Platform.runLater(new Runnable(){ // ..code

在第一行添加Platform.setImplicitExit(false);

所以你的新代码将是 -

private void createScene(){

    Platform.runLater(new Runnable(){
    Platform.setImplicitExit(false);
        @Override
        public void run(){
            jfxPanel = new JFXPanel();
            view = new WebView();
            webEngine = view.getEngine();
            jfxPanel.setScene(new Scene(view));
            panel.add(jfxPanel);
            jfxPanel.setVisible(true);
        }
    });
}

仅供参考,如果您尝试多次显示面板,则无需调用createScene()将JFXPanel添加到JFrame(优选面板也能正常工作),并带有静态引用。处理框架以关闭它,当你再次需要显示这个时,只需设置相同的框架setVisibale(true);.每次调用此帧时,您还可以检查此帧的静态引用是否指向null(表示第一次调用),然后调用createscene(),否则只需将静态引用设置为visible。