2014-07-09 8 views
4

, __LINE____FILE__Nashorn globals은 Java Nashorn Engine (JDK 8)에서 컴파일 및 평가 한 JavaScript 파일 내입니다.왜 Java Nashorn __DIR__, __LINE__ 및 __FILE__이 (가) null입니까?

그러나 그들 모두는 는 NULL ...

들이 일부 특정 Nashorn 구성 또는 관련된 복귀? 추가 구성에 대해서는 documentation에서 아무 것도 말하지 않습니다.

+0

나를 위해 노력하십시오 ... 어떻게 Nashorn을 불러 모으고 있습니까? 'jjs'가 stdin에서 읽는다면'__DIR__'은 null입니다. –

+0

Java에서 Nashorn을 사용하고 있습니다. 'CompiledScript' 객체를 평가 중입니다. –

답변

1

아마도 스크립트를 String으로로드했기 때문입니다. 대부분의 예는 다음과 같습니다 :이 스크립트는 어디에서 온 그것은 단지을 FileReader의 응답을 얻을 수 있기 때문에

engine.eval(new FileReader("scripts/hello.js")); 

는 그런 엔진은 알 수 없습니다. engine.eval("print('hello')")을 호출하는 것과 같습니다. 파일은 없으며 문자열 만 있습니다.

jjs을 사용하여 콘솔에서 스크립트를 호출하면 스크립트가 올바르게 채워집니다.

ScriptContext ctx = engine.getContext(); 
ctx.getBindings(ScriptContext.GLOBAL_SCOPE).put("thisFile", script); 

engine.eval(new FileReader(script), defCtx); 

JS :

print("I am " + thisFile); 

을 맥락에서 문자열로 파일 경로를 저장하고 JS에서이 액세스 :

내가 현재는 더러운 하나를 참조 자바에서 이것을 실현하려 출력 :

I am resources/test.js 

:하지만이 가능합니다, jdk.nashorn.tools.Shelljdk.nashorn.internal.runtime.Context을 설정할 수 있기 때문에이 배열이 전역 배열에 설정되어 있기 때문입니다.