2017-10-13 5 views
3

Je lu attentivement les autres discussions sur ce sujet mais je ne peux pas obtenir mon code pour chercher ce qui vous aide.ne peut pas obtenir d'exécuter ma méthode java de JS

Voici le code:

BrowserComponent bc = new BrowserComponent(); 
    bc.setDebugMode(true); 
    bc.setPage("<html><body></body></html>", null); 
    JavascriptContext context = new JavascriptContext(bc); 
    bc.addWebEventListener("onLoad", e -> { 
     { 
      JSObject syso = (JSObject) context.get("{}"); 
      syso.set("print", new JSFunction() { 
       @Override 
       public void apply(JSObject self, Object[] args) { 
        System.out.println(StringUtils.injectArgs("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9}", args)); 
       } 
      }); 
      context.set("window.syso", syso); 
     } 

     { 
      JSObject syso = (JSObject) context.get("syso"); 
      syso.call("print", "I", "am", "in", "syso"); 
     } 
    }); 

Et voici l'erreur:

Error trying to execute js if (typeof(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1) == 'undefined'){ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1=[]};(ca_weblite_codename1_js_JavascriptContext_RETURN_VAR_call_3=(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[0]).call(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[1], 'print', 'I', 'am', 'in', 'syso')) 
[EDT] 0:0:0,2 - Codename One revisions: 0576ed169fa3bf9f9fe32b3ad516f3aeee60a66c 

[EDT] 0:0:0,3 - Exception: java.lang.RuntimeException - Failed to execute javascript ca_weblite_codename1_js_JavascriptContext_RETURN_VAR_call_3=(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[0]).call(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[1], 'print', 'I', 'am', 'in', 'syso'). The error was netscape.javascript.JSException: TypeError: 'undefined' is not a function (evaluating '(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[0]).call(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[1], 'print', 'I', 'am', 'in', 'syso')') 
java.lang.RuntimeException: Failed to execute javascript ca_weblite_codename1_js_JavascriptContext_RETURN_VAR_call_3=(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[0]).call(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[1], 'print', 'I', 'am', 'in', 'syso'). The error was netscape.javascript.JSException: TypeError: 'undefined' is not a function (evaluating '(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[0]).call(ca_weblite_codename1_js_JavascriptContext_LOOKUP_TABLE1[1], 'print', 'I', 'am', 'in', 'syso')') 
    at com.codename1.javascript.JavascriptContext.call(JavascriptContext.java:975) 
    at com.codename1.javascript.JavascriptContext.call(JavascriptContext.java:862) 
    at com.codename1.javascript.JavascriptContext.call(JavascriptContext.java:807) 
    at com.codename1.javascript.JSObject.call(JSObject.java:960) 
    at net.etceterum.app.javascript.JSEngine.lambda$0(JSEngine.java:105) 

     //JSEngine.java:105 = syso.call("print", "I", "am", "in", "syso"); 

at net.etceterum.app.javascript.JSEngine$$Lambda$9/30625616.actionPerformed(Unknown Source) 
    at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:459) 
    at com.codename1.ui.util.EventDispatcher.access$100(EventDispatcher.java:45) 
    at com.codename1.ui.util.EventDispatcher$CallbackClass.run(EventDispatcher.java:95) 
    at com.codename1.ui.Display.processSerialCalls(Display.java:1114) 
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1058) 
    at com.codename1.ui.Display.mainEDTLoop(Display.java:946) 
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 

Qu'est-ce que je fais mal?

Merci pour toute aide que vous pouvez fournir.

+0

Steve pourrait être plus qualifié pour répondre à cela, mais il me semble que 'syso' pourrait être indéfini à ce stade –

Répondre

0

Le problème est que vous essayez d'appeler « OSSJ » en fonction, avec des paramètres « print », « I », « am », « dans », « OSSJ ». Dans JS, ce que vous avez fait est

window.syso('print','I','am','in','syso'); 

changement

syso.call("print", "I", "am", "in", "syso"); 

à

syso.call("print", new Object[]{"I", "am", "in", "syso"}); 

Et cela fonctionnera.

+0

Bonjour Steve, merci pour votre aide. Cela fonctionne bien maintenant. Il est lisse que je ne vois rien qui se passe réellement. Un, je ne vois rien dans la sortie où que OSSJ est censé system.out les args et deux, mon débogueur ne s'arrête pas sur la ligne System.out.println lors de son exécution. Je me demande vraiment ... – ebardet

+0

Raaaahhh ... Désolé. J'avais brouillé mon code. Cela fonctionne comme tu l'as dit. Merci beaucoup. – ebardet