Ich habe ein Problem mit der WebEngine-Klasse in JavaFX, in dem der JavaScript-Callback scheint nur zu funktionieren.JavaFX8 JavaScript Callback via WebEngine Problem
webEngine = webView.getEngine();
webEngine.load(getClass().getResource("source.html").toString());
webEngine.setUserStyleSheetLocation(getClass().getResource("style.css").toString());
JSObject js = (JSObject) webEngine.executeScript("window");
js.setMember("app", new JavaLink());
public class JavaLink{
public void setDrag(boolean drag) {
System.out.println(drag);
}
}
habe ich den grundlegenden Code wie diese auf, mit oracle docu on WebEngine und erstellt eine HTML-Datei mit dem folgenden Teil: So
<body>
<div id = "block">Text</div>
<script>
document.getElementById("block").onmouseover = function() {notifyPos()};
document.getElementById("block").onmouseout = function() {notifyNeg()};
function notifyPos() {
app.setDrag(true);
}
function notifyNeg() {
app.setDrag(false);
}
</script>
</body>
, wenn ich über den „Text“ schweben würde drucken wahr oder falsch . Das Problem besteht darin, dass es nach einiger Zeit immer wieder aufhört zu funktionieren. Ich habe keine Ahnung warum, aber das Hinzufügen eines Hintergrundbildes zur HTML-Datei über CSS scheint es auf etwa zehn Callbacks zu beschränken (es scheint zeitbezogen zu sein).
EDIT
Okay, nachdem auf einem anderen PC den Code-Snippet zu testen Ich bemerkte, dass der Code überhaupt nicht funktionieren. Wenn jemand jemals ein ähnliches Problem hat, ist es das, was es fest:
Importe:
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
Added Code:
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() { @Override
public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State t1) {
if (t1 == Worker.State.SUCCEEDED) {
// this will be run as soon as WebView is initialized.
JSObject js = (JSObject) webEngine.executeScript("window");
js.setMember("app", new JavaLink());
}
}
});
ich jetzt das Problem haben, dass dieser Code auf meinem Notebook funktioniert (Same Java-Version, IDE, Addons ...), aber nicht auf meinem PC. Es funktioniert immer noch nur für ungefähr zehn Mouseovers. Weiß jemand was es sein könnte?