我正在尝试修复这个异常:无法在32位JVM上加载64位SWT库
我的项目是基于maven的,我在pom.xml文件中声明了这两个依赖项(SWT32位和SWT64位)。
我尝试使用以下函数基于Java架构数据模型(sun.arch.data.model属性)动态加载正确的JAR:
private static synchronized void loadLibrary(File jar) {
try {
URLClassLoader loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
URL url = jar.toURI().toURL();
for (URL it : Arrays.asList(loader.getURLs())) {
if (it.equals(url)) {
return;
}
}
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(loader, new Object[]{url});
} catch (Exception e) {
System.out.println("error");
}
}问题是我不知道如何指定JAR的路径。我看到JAR已下载到.m2文件夹中,但我猜我不能指定该路径。我猜我应该指定JNLP将下载JAR的Java缓存的路径。我说的对吗?
发布于 2017-08-09 21:03:38
我通过这样做解决了这个问题:我已经下载了32位和64位的jars,并将它们放在我的项目的资源文件夹中(/swt/swt_x86.jar和/swt/swt_x86_64.jar)。然后,在需要jar的地方,我使用主题中提到的函数根据Java体系结构加载它。
发布于 2017-08-08 22:30:10
我将为您的工件创建单独的32位和64位版本。这可以通过将swt依赖项包装到配置文件中(您可以将它们称为32bit和64bit),然后激活合适的配置文件来实现。然后,您可以生成两个不同名称或版本(或分类器)的工件。
https://stackoverflow.com/questions/45570766
复制相似问题