Rhino-使用自定义类参数调用javascript函数时出错
我用Java制作了一个Bukkit插件。 我的插件基于Mozilla的Rhino。 我将参数放在函数回调“onPlayerJoin”中的“\u Player”。 我执行了它,但它不起作用;( 您知道这个错误吗?或者需要修改的内容吗? 错误的简要信息如下Rhino-使用自定义类参数调用javascript函数时出错,javascript,java,rhino,Javascript,Java,Rhino,我用Java制作了一个Bukkit插件。 我的插件基于Mozilla的Rhino。 我将参数放在函数回调“onPlayerJoin”中的“\u Player”。 我执行了它,但它不起作用;( 您知道这个错误吗?或者需要修改的内容吗? 错误的简要信息如下 TypeError: Cannot find default value for object. (test.js#1) 代码(Java): 代码1(Javascript,不工作): 代码2(Javascript,工作模式): 如何从java级
TypeError: Cannot find default value for object. (test.js#1)
代码(Java):
代码1(Javascript,不工作):
代码2(Javascript,工作模式):
如何从java级别调用callMethod方法?@Dominikunicki callMethod(“onPlayerJoin”,新玩家(e.getPlayer());
public static void callMethod(String functionName, Object... args) {
for(String filename : Main.scripts) {
Context context = Context.enter();
Scriptable scope = context.initStandardObjects();
try {
ScriptableObject.defineClass(scope, _Bukkit.class);
ScriptableObject.defineClass(scope, _Player.class, false, true);
ScriptableObject.putProperty(scope, "ChatColor", constantsToObj(_ChatColor.class));
context.evaluateReader(scope, new FileReader(FileSystem.LOC_SCRIPT+filename), filename, 0, null);
Object object = scope.get(functionName, scope);
if(object != null && object instanceof Function) {
Function function = (Function) object;
function.call(context, scope, scope, args);
}
} catch(RhinoException e) {
Debug.danger(e.getMessage()+" ("+e.lineNumber()+", "+e.columnNumber()+")");
} catch(IOException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
Debug.danger("An error occured while compiling code.");
} finally {
Context.exit();
}
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
callMethod("onPlayerJoin", new _Player(e.getPlayer()));
}
function onPlayerJoin(player) {
player.sendMessage("hello!");
}
function onPlayerJoin(player) {
new Player("playername").sendMessage("hello!");
}