2017-11-07 12 views
0

나솜과 관련된 경험을하고 있습니다.java Nashorn ReferenceError

이 간단한 코드를 자바에서 만들었습니다. 여기서 정의한 사용자 정의 객체를 사용하고 싶습니다.

 ScriptEngine engine = new 
     ScriptEngineManager().getEngineByName("javascript"); 
     System.out.println("engine = " + engine.getClass().getName().toString()); 

     engine.put("id", "2"); 
     System.out.println("id = " + engine.eval("id")); 

     Object person = engine.eval("importClass(Data.com.personal.Person)"); 

나는 다음과 같은 오류 반환 : 이제

 Exception in thread "main" javax.script.ScriptException: ReferenceError: "importClass" is not defined in <eval> at line number 1 

내가 구글을 그들이 사용하는 말 :

 load("nashorn:mozilla_compat.js"); 

을하지만 난 내가 어디다에 약간의 혼동 해요 (또는 사용법)이 하중 기능?


는 UPDATE

함께 클래스 작업을 가져 nashorn 그것은이 같은 호출에 필요한 메이크업 : 그것은 내게 분명 아니 었 어떤 이유로

engine.eval("importClass(com.personal.Person)"); 

: P

+0

누락 된 단계는 내가 engine.eval 내부 부하를 호출 할 필요가 분명했다 확인 –

답변

1

사용 Nashorn, 다음을 사용해야합니다.

var MyJavaClass = Java.type('my.package.MyJavaClass');

이제 사용자 정의 Java 클래스를 사용할 수 있습니다.

은 자세한 내용은이 좋은 소개를 참조하십시오 http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/

전체 예제 :

public final class NashornTest { 

    // Class can even be inner class. Must be public however! 
    public static class MyData { 

     private int id; 
     private String name; 

     public MyData(int id, String name) { 
      this.id = id; 
      this.name = name; 
     } 

     public int getId() { 
      return id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     @Override 
     public String toString() { 
      return String.format("MyData[%d, %s]", id, name); 
     } 

    } 

    @Test 
    public void test() throws ScriptException { 
     final ScriptEngineManager sem = new ScriptEngineManager(); 
     final ScriptEngine se = sem.getEngineByName("javascript"); 

     Object obj = se.eval(
      "var MyJavaData = Java.type('test.el.NashornTest$MyData');" + 
      "new MyJavaData(42, 'The usual number');"); 

     // prints MyData[42, The usual number] 
     System.out.println(obj); 
    } 

}