Java 加载nashorn.eval(文件/字符串)的代码的寿命
考虑以下几点:Java 加载nashorn.eval(文件/字符串)的代码的寿命,java,nashorn,Java,Nashorn,考虑以下几点: ScriptEngineManager manager = new ScriptEngineManager(null); // Why not passing null results in later "nashorn" return null? this.engine = manager.getEngineByName("nashorn"); File scriptsDir = IOUtils.getScriptDir(); // some file File[] scri
ScriptEngineManager manager = new ScriptEngineManager(null); // Why not passing null results in later "nashorn" return null?
this.engine = manager.getEngineByName("nashorn");
File scriptsDir = IOUtils.getScriptDir(); // some file
File[] scripts = scriptsDir.listFiles(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.toLowerCase().endsWith(".js");
}
});
for (File script : scripts) // Loop all
{
try
{
// basically I want to evaluate all script files and pull "QuestHolder" object from them.
this.engine.eval(new FileReader(script));
Object o = this.engine.get("qh"); // get "QuestHolder" object.
if (o instanceof QuestHolder)
{
QuestManager.register((QuestHolder) o);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (ScriptException e)
{
e.printStackTrace();
}
}
下面是2.js示例:
/dir/quest1.js:
var QuestHolder = Java.type('example.quest.QuestHolder');
var qh = new QuestHolder("Save the christmas!");
/dir/quest2.js:
var QuestHolder = Java.type('example.quest.QuestHolder');
var qh = new QuestHolder("Get all the presents!");
我想知道更多关于内部的事情
感谢您提供的链接和/或解释。脚本引擎缓存已编译的类对象。脚本函数在通常的GC规则下是活动的——只要存在可以从另一个活动对象访问的可传递链接。因此,Java.type是活动的,只要您从使用它的脚本函数调用中引用它 您可以使用特定于nashorn的API jdk.nashorn.API.scripting.ClassFilter()过滤对Java类型的脚本访问