Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
针对Java的不同Nashorn引擎<;15和>;=15?_Java_Kotlin_Nashorn_Java 15 - Fatal编程技术网

针对Java的不同Nashorn引擎<;15和>;=15?

针对Java的不同Nashorn引擎<;15和>;=15?,java,kotlin,nashorn,java-15,Java,Kotlin,Nashorn,Java 15,我正试图为Nashorn找到一个解决方案,使其与1.8以上版本的Java兼容,正如我在前面询问的另一个版本中所说的那样。 我目前正在尝试捕获不受支持的ClassVersionError,以确定系统是否能够像这样运行Java 15(Kotlin代码): scriptEngine=try{ //Java>=15 org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().scriptEngine }捕获(e:UnsupportedCl

我正试图为Nashorn找到一个解决方案,使其与1.8以上版本的Java兼容,正如我在前面询问的另一个版本中所说的那样。
我目前正在尝试捕获
不受支持的ClassVersionError
,以确定系统是否能够像这样运行Java 15(Kotlin代码):

scriptEngine=try{
//Java>=15
org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().scriptEngine
}捕获(e:UnsupportedClassVersionError){
//爪哇<15
@压制(“反对”)
jdk.nashorn.api.scripting.NashornScriptEngineFactory().scriptEngine
}
但是,似乎没有捕捉到错误。堆栈跟踪如下所示:

java.lang.UnsupportedClassVersionError: org/openjdk/nashorn/api/linker/NashornLinkerExporter has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 55.0
我还尝试捕获
NoClassDefFoundError
反转之前的try/catch(加载Java<15 Nashorn,如果不存在,加载独立的),但错误是相同的


编辑:看起来这个错误是由Java本身抛出的。

这样怎么样(对不起,我不是Kotlin开发人员,所以是纯Java):

publicstaticscriptengine getJSScriptEngine(){
if(Double.parseDouble(System.getProperty(“java.specification.version”))<15){
返回新的ScriptEngineManager().getEngineByName(“js”);
}否则{
返回新的org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory()
.getScriptEngine();
}
}

像这样的东西怎么样(对不起,我不是Kotlin开发人员,所以纯Java):

publicstaticscriptengine getJSScriptEngine(){
if(Double.parseDouble(System.getProperty(“java.specification.version”))<15){
返回新的ScriptEngineManager().getEngineByName(“js”);
}否则{
返回新的org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory()
.getScriptEngine();
}
}

错误由JVM本身引发。它是从
catch
块内部抛出的,因为在旧Nashorn的类加载过程中,出于某种原因(名称冲突?)它最终会从Nashorn的独立版本加载一个类(
NashornLinkedRexporter
),该类似乎也出现在类路径中,并且由于它是使用jvmTarget=15编译的,它无法加载到早期的JVM中


对于JVM,错误由JVM本身抛出。它是从
catch
块内部抛出的,因为在旧Nashorn的类加载过程中,出于某种原因(名称冲突?)它最终会从Nashorn的独立版本加载一个类(
NashornLinkedRexporter
),该类似乎也出现在类路径中,并且由于它是使用jvmTarget=15编译的,它无法加载到早期的JVM中


对于JVMNashorn维护人员,请点击此处!我刚刚发布了,它与15.1.1相同,但现在是用Java11编译的。这意味着您现在可以将独立Nashorn与Java 11及更高版本一起使用,而不必切换为<15和>=15。我写了一篇关于如何在Java11-14上使用它的文章,其中既有内置的也有独立的Nashorn!我刚刚发布了,它与15.1.1相同,但现在是用Java11编译的。这意味着您现在可以将独立Nashorn与Java 11及更高版本一起使用,而不必切换为<15和>=15。我写了一篇关于如何在Java11-14上使用它的文章,其中既有内置的,也有独立的Nashorn

public static ScriptEngine getJSScriptEngine() {
    if (Double.parseDouble(System.getProperty("java.specification.version")) < 15) {
        return new ScriptEngineManager().getEngineByName("js");
    } else {
        return new org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory()
            .getScriptEngine();
    }
}