3
私はいくつかの特定の要求(例えば、毎回プリンタを選択せずに印刷する)のためにJavaをサポートするWebベースのアプリケーションを作っています。idは私にクレイジーです。数分後にJavaFX JSObjectの動作が停止しますか?
私は、ブラウザのオブジェクトとすべてが正常に動作しインスタンス化のためのJavaFXを使用していますが、もちろん、私はJavaScriptからJavaへのコールバックを行う必要があるが、ここではコードです:
...
...
we.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>()
{
@Override
public void changed(ObservableValue<? extends State> 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");
}
}
});
...
...
これは動作しますが、いくつかminutestheブリッジの後stooは完全に働いて、javascriptはもうコールバックを作ることができません。私が "app"オブジェクトに対してalert()を実行しようとすると、私は未定義です。 私はJDK9を使用しています
'JSObject'は、渡されたメンバーへの弱い参照しか保持していないということをあまりにも遠くまで取りすぎません。 'Bridge'インスタンスへの参照を保持してみてください。 (それはあなたが意図したように見えますが、 'JSObject'のためにまったく新しいものを作成します...) – Itai
実際に@ sillyfly、あなたは正しいです。わからないことに、私はBridgeの新しいインスタンスを渡しました。なぜなら、javafxはそういったローカルな割り当てに少しでも耐性があるようです。どうもありがとう。 –