我目前正在使用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)
答案 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中运行。
这解决了我的问题。