Browse Source

Pull request #1575: release→final

Merge in CORE/base-third from ~BJORN/base-third:final/10.0 to final/10.0

* commit 'bba8ea320ee87408ed81053e4f200822c6c59149':
  release→final
final/10.0
Kara 4 years ago
parent
commit
f30ba0fa85
  1. 44
      fine-j2v8/src/main/java/com/eclipsesource/v8/LibraryLoader.java
  2. 1
      fine-j2v8/src/main/java/com/eclipsesource/v8/V8.java

44
fine-j2v8/src/main/java/com/eclipsesource/v8/LibraryLoader.java

@ -193,4 +193,48 @@ class LibraryLoader {
} catch (Throwable e) {
}
}
//内核版本windows NT6.2以下存在加载dll之后无法正常退出的问题,注册钩子函数退出时杀掉进程
static void checkExceptionVersion() {
String version = System.getProperty("os.version");
if (PlatformDetector.OS.isWindows() && belowMinimumVersion(version)) {
registerExit();
}
}
//低于指定版本,6.2以下
private static boolean belowMinimumVersion(String version) {
return compareVersion(version, MINIMUM_VERSION) < 0;
}
private static int compareVersion(String version1, String version2) {
String[] versionArray1 = version1.split("\\.");//注意此处为正则匹配,不能用".";
String[] versionArray2 = version2.split("\\.");
int idx = 0;
int minLength = Math.min(versionArray1.length, versionArray2.length);//取最小长度值
int diff = 0;
while (idx < minLength
&& (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0//先比较长度
&& (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {//再比较字符
++idx;
}
//如果已经分出大小,则直接返回,如果未分出大小,则再比较位数,有子版本的为大;
diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
return diff;
}
//低于指定版本,6.2以下
private static void registerExit() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
String name = ManagementFactory.getRuntimeMXBean().getName();
String pid = name.split("@")[0];
try {
Runtime.getRuntime().exec("taskkill /F /PID " + pid);
} catch (Exception ignore) {
}
}
});
}
}

1
fine-j2v8/src/main/java/com/eclipsesource/v8/V8.java

@ -76,6 +76,7 @@ public class V8 extends V8Object {
try {
LibraryLoader.loadLibrary(tmpDirectory);
nativeLibraryLoaded = true;
LibraryLoader.checkExceptionVersion();
} catch (Error e) {
nativeLoadError = e;
} catch (Exception e) {

Loading…
Cancel
Save