2017-10-13 1 views
3

해당 주제에 대한 다른 스레드를 미리 볼 수는 있지만 그래도 작동하도록 코드를 가져올 수 없으므로 도움을 요청할 수 없습니다. 여기 JS에서 내 Java 메소드를 실행할 수 없습니다.

코드입니다 :

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"); 
     } 
    }); 

그리고 여기에 오류가 :

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) 

내가 잘못하고있는 중이 야 무슨 일이?

도움을 주셔서 감사합니다.

+0

스티브가 대답 할 자격이 더 많았지 만이 단계에서'syso'가 정의되지 않았을 수도 있습니다. –

답변

0

문제는 매개 변수 "print", "I", "am", "in", "syso"를 사용하여 "syso"를 함수로 호출하려는 것입니다. JS에서, 당신이했던 것은

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

로 변경

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

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

입니다 그리고 그것은 작동합니다.

+0

안녕 스티브, 도와 줘서 고마워. 이제는 원활하게 돌아갑니다. 그것은 실제로 아무 일도 일어나지 않는 매끄러운 것입니다. 하나, 출력에서 ​​syso가 system으로 가정되는 곳에서는 아무것도 표시되지 않습니다. args와 두 가지로, 실행시 System.out.println 행에서 디버거가 멈추지 않습니다. 정말 궁금해서 ... – ebardet

+0

Raaaahhh ... 죄송합니다. 나는 내 코드를 뒤섞었다. 그것은 당신이 말한대로 작동합니다. 고마워. – ebardet

관련 문제