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

标签 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 位,但由于某种原因 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)

最佳答案

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

请注意,仅包含“两个”插件片段是行不通的,因为它们都会尝试加载并导致问题。

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

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

最简单的解决方案可能只是拥有两个单独的 Eclipse 实例:一个设置运行 32 位,一个设置运行 64 位。这样您就不必担心来回切换,也不必费力地进行配置。

关于java - 无法在 32 位 JVM 上加载 64 位 SWT 库(即使我下载了 32 位 SWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976939/

相关文章:

java - 在 Joda Time 中创建一个没有年份的日期范围?

java - 在注释处理器中获取字段类

java - 变量重复错误?

java - Eclipse/Maven 项目缺少必需的库/缺少 Artifact

java - 为什么我不能增加我的堆大小?

java - 在 Oracle 中使用 Jetty 的连接池

java - 智能垂直流布局

assembly - 在汇编中,指令是否指定数据类型?

linux - 确定 NASM 何时可以推断出 mov 操作的大小

assembly - 用于 Intel x86 汇编器的 Windows IDE?