Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JavaNashorn实例方法_Javascript_Java_Jvm - Fatal编程技术网

Javascript JavaNashorn实例方法

Javascript JavaNashorn实例方法,javascript,java,jvm,Javascript,Java,Jvm,我想试试Nashorn脚本功能。一切正常,我似乎能够从.js脚本调用静态方法,如下所示: var fun3 = function() { print("Another day!"); var Go = Java.type('somePack.Go'); var result = Go.fun1('John Doe'); print("\n" + result); } 在我的“Go”java类中: public static String fun1(String

我想试试Nashorn脚本功能。一切正常,我似乎能够从.js脚本调用静态方法,如下所示:

var fun3 = function() {
    print("Another day!");
    var Go = Java.type('somePack.Go');
    var result = Go.fun1('John Doe');
    print("\n" + result);
}
在我的“Go”java类中:

public static String fun1(String name) {
    System.out.format("Hi there from Java, %s", name);
    return "greetings from java";
}
但是我想做的是使fun1方法非静态,使其成为一个实例方法

   public String fun1(String name) {
        System.out.format("Hi there from Java, %s", name);
        return "greetings from java";
    }
在我的script.js中,我尝试过:

var Go = new Java.type('somePack.Go');
但我得到了一个错误:

Caused by: <eval>:19 TypeError: function type() { [native code] } is not a constructor function
由::19 TypeError引起:函数类型(){[native code]}不是构造函数
有没有一个简单的方法来实现我的目标

谢谢

完整堆栈:

    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)
    at somePack.Go.go(Go.java:35)
    at somePack.Go.main(Go.java:16)
Caused by: <eval>:19 TypeError: function type() { [native code] } is not a constructor function
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185)
    at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.getBestConstructor(ScriptFunctionData.java:244)
    at jdk.nashorn.internal.runtime.ScriptFunction.findNewMethod(ScriptFunction.java:758)
    at jdk.nashorn.internal.runtime.ScriptObject.lookup(ScriptObject.java:1827)
    at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:104)
    at jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:98)
    at jdk.internal.dynalink.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(CompositeTypeBasedGuardingDynamicLinker.java:176)
    at jdk.internal.dynalink.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:124)
    at jdk.internal.dynalink.support.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:154)
    at jdk.internal.dynalink.DynamicLinker.relink(DynamicLinker.java:253)
    at jdk.nashorn.internal.scripts.Script$Recompilation$2$384$\^eval\_.fun3(<eval>:19)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
    at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)
位于jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
位于jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392)
位于jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)
在somePack.Go.Go(Go.java:35)
位于somePack.Go.main(Go.java:16)
由::19 TypeError引起:函数类型(){[本机代码]}不是构造函数
位于jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
位于jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:213)
位于jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:185)
位于jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:172)
位于jdk.nashorn.internal.runtime.ScriptFunctionData.getBestConstructor(ScriptFunctionData.java:244)
位于jdk.nashorn.internal.runtime.ScriptFunction.findNewMethod(ScriptFunction.java:758)
位于jdk.nashorn.internal.runtime.ScriptObject.lookup(ScriptObject.java:1827)
位于jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardInvocation(NashornLinker.java:104)
在jdk.nashorn.internal.runtime.linker.NashornLinker.getguaredInvocation(NashornLinker.java:98)中
位于jdk.internal.dynalink.support.CompositeTypebasedGuardingDynamicScalt.getGuardedInvocation(CompositeTypebasedGuardingDynamicScalt.java:176)
位于jdk.internal.dynalink.support.compositeguardingdynamicsold.getGuardedInvocation(compositeguardingdynamicsold.java:124)
位于jdk.internal.dynalink.support.LinkerServiceSiml.GetGuardeInvocation(LinkerServiceSiml.java:154)
位于jdk.internal.dynalink.dynamicsold.relink(dynamicsold.java:253)
在jdk.nashorn.internal.scripts.Script$Recompilation$2$384$^eval\.fun3(:19)
位于jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
位于jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
位于jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
位于jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
位于jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)
您应该使用

var Go = Java.type('somePack.Go');
var goObject = new Go();
var goObject=new(Java.type('somePack.Go'))();也可以,但是。。。