JavaFX JSObject几分钟后停止工作?

我正在制作一个基于Web的应用程序,Java支持某些特定的请求(例如每次都不打印机打印),而且有些东西让我发疯

我使用JavaFX实例化浏览器对象,一切正常,但当然我需要从JavaScript到Java进行回调,这里是代码:

... ... we.getLoadWorker().stateProperty().addListener( new ChangeListener() { @Override public void changed(ObservableValue observable, State oldValue, State newValue) { if ( newValue == Worker.State.SUCCEEDED ) { bridge = new Bridge(); JSObject jsobj = (JSObject) we.executeScript( "window" ); jsobj.setMember( "app", new Bridge() ); } if ( newValue == Worker.State.CANCELLED ) { System.out.println( newValue ); System.out.println( "An error accourred" ); } } }); ... ... 

这可以工作,但几分钟后,桥stoo完全工作,javascript不能再回调,如果我尝试在“app”对象上做一个alert()它返回我undefined。 我正在使用JDK9

为了使解决方案更加明显:@sillyfly建议的方法有效。

不是为每个状态更改创建一个新的Bridge (或在我的案例中为Console )实例,而是创建一个实例并每次重新分配它。 以下几行。

 public class AppController { public WebView webview; @FXML public void initialize() { final Console console = new Console(); final WebEngine engine = webview.getEngine(); engine.setJavaScriptEnabled(true); engine.getLoadWorker().stateProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Worker.State oldValue, Worker.State newValue) { final JSObject window = (JSObject) engine.executeScript("window"); window.setMember("console", console); } }); } public class Console { public void log(String text) { System.out.println("[WebView console] " + text); } } }