From d3b8226b6926eefcee16ca4712e1ee3440ad0ecd Mon Sep 17 00:00:00 2001 From: 502647092 Date: Sat, 11 Nov 2017 18:04:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9C=A8MODS=E6=9C=8D?= =?UTF-8?q?=E4=B8=8B=E6=9C=AA=E5=8A=A0=E8=BD=BDjs=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 502647092 --- .../yumc/YumCore/engine/MiaoScriptEngine.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/pw/yumc/YumCore/engine/MiaoScriptEngine.java b/src/main/java/pw/yumc/YumCore/engine/MiaoScriptEngine.java index 9cfdd6b..e96c070 100644 --- a/src/main/java/pw/yumc/YumCore/engine/MiaoScriptEngine.java +++ b/src/main/java/pw/yumc/YumCore/engine/MiaoScriptEngine.java @@ -1,6 +1,12 @@ package pw.yumc.YumCore.engine; +import java.io.File; import java.io.Reader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.HashMap; import javax.script.Bindings; @@ -50,8 +56,24 @@ public class MiaoScriptEngine implements ScriptEngine, Invocable { public MiaoScriptEngine(ScriptEngineManager engineManager, final String engineType) { try { engine = engineManager.getEngineByName(engineType); - } catch (final NullPointerException ex) { - engine = engineManager.getEngineByName("javascript"); + } catch (final NullPointerException ignored) { + } + if (engine == null) { + File nashorn = new File(System.getProperty("java.ext.dirs").split(File.pathSeparator)[0], "nashorn.jar"); + if (nashorn.exists()) { + try { + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + // 设置方法的访问权限 + method.setAccessible(true); + // 获取系统类加载器 + URL url = nashorn.toURI().toURL(); + method.invoke(Thread.currentThread().getContextClassLoader(), url); + engineManager = new ScriptEngineManager(); + engine = engineManager.getEngineByName(engineType); + } catch (NoSuchMethodException | MalformedURLException | IllegalAccessException | InvocationTargetException ignored) { + ignored.printStackTrace(); + } + } } }