|
|
@ -15,6 +15,7 @@ import java.io.File; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.InputStream; |
|
|
|
|
|
|
|
import java.lang.management.ManagementFactory; |
|
|
|
|
|
|
|
|
|
|
|
class LibraryLoader { |
|
|
|
class LibraryLoader { |
|
|
|
|
|
|
|
|
|
|
@ -23,6 +24,8 @@ class LibraryLoader { |
|
|
|
|
|
|
|
|
|
|
|
static final String SWT_LIB_DIR = ".j2v8"; |
|
|
|
static final String SWT_LIB_DIR = ".j2v8"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static final String MINIMUM_VERSION = "6.2"; |
|
|
|
|
|
|
|
|
|
|
|
static { |
|
|
|
static { |
|
|
|
DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
|
|
|
|
DELIMITER = System.getProperty("line.separator"); //$NON-NLS-1$
|
|
|
|
SEPARATOR = System.getProperty("file.separator"); //$NON-NLS-1$
|
|
|
|
SEPARATOR = System.getProperty("file.separator"); //$NON-NLS-1$
|
|
|
@ -193,4 +196,54 @@ class LibraryLoader { |
|
|
|
} catch (Throwable e) { |
|
|
|
} 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) { |
|
|
|
|
|
|
|
int i = compareVersion(version, MINIMUM_VERSION); |
|
|
|
|
|
|
|
if (i < 0) { |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 ex) { |
|
|
|
|
|
|
|
System.exit(0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|