Ich mache eine Web-basierte App mit Java-Unterstützung für bestimmte Anforderungen (z. B. drucken, ohne den Drucker jedes Mal zu wählen) und es gibt etwas, das mich treibt verrückt.JavaFX JSObject funktioniert nach ein paar Minuten nicht mehr?
ich JavaFX für instantiate der Browser-Objekt und alles funktioniert gut, aber natürlich muss ich Rückrufe von JavaScript zu Java machen, hier ist der Code:
...
...
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");
}
}
});
...
...
Das funktioniert aber nach ein paar minutesthe Brücke stoo funktioniert total, javascript kann keine callbacks mehr machen und wenn ich versuche eine alarm() auf das "app" objekt zu setzen gibt es mich undefined zurück. Ich benutze JDK9
Es ist nicht zu weit hergeholt, dass das 'JSObject' nur schwache Referenzen auf die Member enthält, die an es übergeben werden. Könnten Sie versuchen, einen Verweis auf die 'Bridge'-Instanz zu halten? (Es sieht so aus, als ob Sie das wollten, aber dann erstellen Sie ein ganz neues für das 'JSObject' ...) – Itai
@sillyfly tatsächlich, Sie haben Recht. Unerklärlicherweise habe ich eine neue Instanz von Bridge übergeben und ich weiß nicht wieso, javafx scheint auf lokale Art so wenig intolerant zu sein. Danke vielmals. –