2015-04-14 5 views
5

Ho riscontrato un "errore di overflow dello stack irreversibile" che non riesco a capire. Da docs: è necessario creare un oggetto di interfaccia (di qualsiasi classe) e renderlo noto a JavaScript chiamando JSObject.setMember().Errore irreversibile di stackoverflow durante l'esecuzione di richiami da JavaScript a Java

Ecco la condivisione di codice Java e utilizzando l'oggetto di interfaccia:

// somewhere in the code 
JSObject window = (JSObject) engine.executeScript("window"); 
window.setMember("foo", new Foo()); // <-- shares 
window.call("testFoo");    // <-- uses 

// somewhere else 
class Foo { 
    public void bar() { 
     System.out.println("baz"); 
    } 
} 

Ed ecco il codice JavaScript utilizzando quell'oggetto:

window.testFoo = function() { 
    window.foo.bar(); 
} 

Si verifica se mi innescare manualmente come esposizione qui sopra, o se lo faccio scattare attraverso qualche evento JavaScript.

+0

L'ho provato e funziona per me (Java 1.8.0_11). Forse sarebbe d'aiuto se tu pubblicassi un [SSCCE] (http://sscce.org/). –

+2

Penso che Foo dovrebbe essere pubblico, altrimenti mi sembra OK (senza provarlo). Il documento che colleghi è un vecchio post del blog basato su una precedente anteprima dello sviluppatore. Documentazione più moderna è disponibile per [Java 8] (http://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/js-javafx.htm). – jewelsea

+5

Mi piace il modo in cui è stato utilizzato lo stackoverflow per ottenere assistenza durante il recupero da un errore StackOverflow irrecuperabile. – jewelsea

risposta

1

La risposta era nei commenti, non posso credere di aver provato tutto per ore ed è stata una soluzione molto rapida.

Si scopre che l'interfaccia esposta deve essere pubblica.

Problemi correlati