2014-07-09 43 views
4

我正在嘗試使用由Java Nashorn Engine(JDK 8)編譯和評估的JavaScript文件中的,__LINE____FILE__Nashorn全局變量爲什麼Java Nashorn __DIR__,__LINE__和__FILE__爲空?

然而,所有的人都返回NULL ...

他們是否涉及到一些具體的犀牛配置或?它沒有在documentation中說明任何其他配置使它們工作。

+0

適用於我...你怎麼援引Nashorn?請注意,如果'jjs'正在從stdin讀取,'__DIR__'爲空。 –

+0

我正在使用Java的Nashorn。評估'CompiledScript'對象。 –

回答

1

這是因爲您可能已將腳本作爲字符串加載。大多數的例子是這樣的:

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

時發動機不知道,在這個腳本是從哪裏來的,因爲它只是變得從的FileReader的響應。這就像打電話engine.eval("print('hello')"),沒有文件,只是一個字符串。

如果您從控制檯調用腳本,使用jjs,則它們將被正確填充。

從Java實現這一目標,我目前只看到一葷一:保存文件路徑在上下文字符串和JS訪問此:

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

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

的JS:

print("I am " + thisFile); 

輸出:

I am resources/test.js 

注意:但它是可能的,因爲jdk.nashorn.tools.Shell能夠設置一個jdk.nashorn.internal.runtime.Context,這是在全局數組中設置的。

相關問題