无法在32位JVM上加载64位SWT库(即使我下载了32位SWT)

时间:2014-02-24 00:51:13

标签: java eclipse x86 swt 64-bit

我目前正在使用64位Windows 7计算机进行开发。我的机器上安装了JRE7 64位和JRE7 32位。我正在使用Eclipse 64位版本并配置Window - Preferences - Java - Installed JRE以使用JRE7 32位作为我的默认JRE进行测试。还安装了32位JDK,目前正在使用它进行测试。

我仔细检查并确保我确实使用SWT 32位Windows,但仍然在编译期间它抛出了“无法在32位JVM上加载64位SWT库”错误。

错误清楚地表明Eclipse确实使用了JDK7-32 Bit,但出于某种原因,SWT库(http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.3-201306052000/swt-4.3-win32-win32-x86.zip)并不完全是32位o.O ......

有什么想法吗?任何解决方法?

仅供参考,将JRE切换为64位编译程序就好了,但我希望我的应用程序可以在32位和64位上运行。

以下是完整的例外情况:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:260)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:240)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.widgets.Widget.<clinit>(Widget.java:107)
    at Test.Application.<init>(Application.java:19)a
    at Test.Application.main(Application.java:29)

3 个答案:

答案 0 :(得分:3)

SWT使用插件片段来控制它 - 有一个32位片段和一个64位片段(以及Mac,Linux等片段)。确保您的启动配置设置为使用正确的片段,具体取决于您正在运行它的JVM。

作为一个注释,只包含“两个”插件片段将无法正常工作,因为它们都会尝试加载并导致问题。

此外,this相关问题可能有用。

另一个想法是深入研究loadLibrary函数 - 从我记忆中的工作原理,它从某个临时位置查找SWT dll的缓存版本,因此它可能正在使用缓存64位DLL,而不是从jar中正确解压缩32位。在这种情况下,删除缓存的问题可能会解决问题。

最简单的解决方案可能只是拥有两个独立的Eclipse实例:一个设置运行32位,一个设置运行64位。通过这种方式,您不必担心来回切换,也不必为配置而烦恼。

答案 1 :(得分:0)

“我正在使用Eclipse 64位版本并配置了Window - Preferences - Java - 安装的JRE,以便使用JRE7 32位作为我的默认JRE进行测试。”

如何配置你的eclipse指向并使用一个完整的32位jdk而不是项目的jre?

答案 2 :(得分:0)

在Eclipse中单击

运行 - &gt;外部工具 - &gt;外部工具配置......

在JRE选项卡中选择选项

在与工作区相同的JRE中运行。

这解决了我的问题。