cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk memanggil kaedah dalam js di java?

Bagaimana untuk memanggil kaedah dalam js di java

// js 代码
STRING_UTIL = {};
STRING_UTIL.isNotEmpty = function (str){
    return "" != str;
}

// java 代码
Reader scriptReaderB = new InputStreamReader(
new FileInputStream(
    new File("F:\tech-study\js-comm\release\bundle.js")),"utf-8");
      
      
      engine.eval(scriptReaderB);
      // engine.eval(scriptReaderA);
      if (engine instanceof Invocable)  
      {  
          // 调用JS方法  
          Invocable invocable = (Invocable)engine;  
          Object result = invocable.invokeFunction("STRING_UTIL.isNotEmpty", new Object[]{"hahaha"});
          
          System.out.println(result.toString());

      }
// 调用异常
java.lang.NoSuchMethodException: no such method: STRING_UTIL.isNotEmpty
    at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
    at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
    at AAAAAAA.main(AAAAAAA.java:29)

// 如果在添加一个全局函数
function isNotEmpty (str){
    return STRING_UTIL.isNotEmpty(str);
}

Tukar kaedah panggilan kepada

Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});

Beginilah ia berfungsi

天蓬老师天蓬老师2786 hari yang lalu1327

membalas semua(3)saya akan balas

  • 为情所困

    为情所困2017-07-05 10:28:55

    Selepas pelaksanaan anda sendiri, anda boleh menggunakan dua kaedah untuk mencapainya:

    1. Gunakan engine.eval
      Hasil objek = engine.eval("STRING_UTIL.isNotEmpty('" + str + "')");

    2. Gunakan kaedah invokeMethod untuk melaksanakan
      Mula-mula dapatkan objek

    Object thiz = engine.get("STRING_UTIL");
    Seterusnya, panggil kaedah mengikut objek
    Hasil objek = invocable.invokeMethod(thiz, "isNotEmpty", new Object[]{"hahaha"});

    Memperkenalkan buku lain kepada semua orang: "Pemahaman Mendalam Java 7: Teknologi Teras dan Amalan Terbaik"
    Bab kedua di sini sangat terperinci. Kalau nak pergi boleh tengok

    balas
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:28:55

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine javaScript = manager.getEngineByName("JavaScript");
    InputStream stream =
                        JS.class.getResourceAsStream("/js/test.js");
    BufferedReader reader =
                        new BufferedReader(new InputStreamReader(stream));
    javaScript.eval(reader);
    invocable = (Invocable) javaScript;
    invocable.invokeFunction("method");

    invokeFunction kaedah penerangan Parameter pertama ialah nama kaedah, parameter berikut adalah semua parameter kaedah, dan nilai pulangan ialah objek.

    balas
    0
  • 怪我咯

    怪我咯2017-07-05 10:28:55

    Tidak
    java ialah bahasa back-end, js ialah bahasa front-end dan kod js tidak boleh dilaraskan dalam java

    balas
    0
  • Batalbalas