25

我正在尝试调试此问题,但不确定我需要在哪里替换Eclipse 的 SWT jar 文件。

当前系统配置:

Eclipse Helios 3.6 - 32 Bit
JDK 1.6 
JVM - 32 Bit 
Windows 7 - 64 Bit

错误信息:

java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:174)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.widgets.Display.<clinit>(Display.java:138)
    at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:687)
    at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
    at de.vogella.rcp.intro.first.Application.start(Application.java:18)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
An error has occurred. See the log file

解决方法:

  1. Link1:了解问题的原因,我尝试将 64 位 SWT 替换为 32 位,但我不确定我是否做得对?

    下载 32 位文件 swt-3.6.1-win32-win32-x86.zip 解压 zip 文件 有文件如下图

    在此处输入图像描述

    复制的 swt.jar 文件导航到 C:\Program Files\eclipse\plugins 删除 64 位 Swt 文件(即 org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c )放置复制的 swt.jar 文件并重新启动

    仍然抛出相同的错误

    还尝试将 swt.jar 文件重命名为 org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c

    还是一样的错误

  2. Link2:建议了替代解决方案,但无法解决问题。

    还是一样的错误

  3. 我真的不想卸载 32-JVM 和 32-Bit Eclipse 并安装相应的 64 位版本。

    不是选项

解决方法 在paulsm4Paul Webster响应之后,我很困惑

当我尝试执行此操作以检查 Eclipse 中的 JVM、JRE 版本时

package javaVersion;

public class JavaVersion
{

    public static void main( String[] args )
    {
        System.out.println( "JRE Version :" + System.getProperty( "java.runtime.version" ) );
        System.out.println( "JVM Bit size: " + System.getProperty( "sun.arch.data.model" ) );

    }

}

输出:

1.6.0_31-b05
JVM Bit size: 32

但是,当我在命令行上尝试 JAVA - VERSION

在此处输入图像描述

所以我的理解系统有 64 位 JVM,而 Eclispe 正在读取 32 位 JVM。那么如何转移系统读取 32 位 JVM 呢?

4

13 回答 13

28

Eclipse 正在使用您在启动配置中定义的任何 JRE 启动您的应用程序。由于您正在运行 32 位 Eclipse,因此您正在运行/调试它的 32 位 SWT 库,并且您需要运行 32 位 JRE。

无论出于何种原因,您的 64 位 JRE 都是您的默认已安装 JRE。

要更改此设置,首先确保在 Installed JREs 首选项中配置了 32 位 JRE。转到 Window -> Preferences 并导航到 Java -> Installed JREs:

已安装的 JRE

您可以单击添加并导航到您的 32 位 JVMJAVA_HOME以添加它。

然后在您的运行配置中,找到您的 Eclipse 应用程序并确保将运行时 JRE 设置为您刚刚配置的 32 位 JRE:

运行配置

(请注意未突出显示的组合框。)

不要尝试更换 SWT 罐子,这可能会以失败告终。

于 2012-06-14T17:20:59.170 回答
8

好吧,duh :) SWT 使用 JNI ...并且 JNI 是严格特定于平台的。

使用 32 位库和 32 位 JVM,64 位库和 64 位 JVM,确保版本完全匹配,不要混用。

恕我直言...

PS:您可以在同一个盒子上同时存在多个 JVM 和/或多个 Eclipse。

于 2012-06-13T20:15:11.100 回答
8

我从路径中删除了 C:\ProgramData\Oracle\Java\javapath ,它对我有用。

并确保在路径中包含 x64 JDK 和 JRE 地址。

于 2015-03-15T18:26:10.693 回答
3

只需将 -d32 添加到“编辑启动配置属性”中的 VM 参数即可。

于 2014-01-12T17:20:18.453 回答
1

I also faced the same problem a long time ago.

Here is the Solution

In Eclipse Click on "Windows"-->"Preferences"---->"Java"---> "Installed JREs"---->Select the JDK, click on "Edit".

Check your JDK path, is it according to your path in environmental variables defined in system. if not then change it to "path" defined directory.

于 2013-08-26T06:13:53.693 回答
1

我刚刚用 64 位版本替换了我的包中的 swt.jar,它立即工作。无需重新编译整个包,只需替换 swt.jar 文件并确保您的应用程序清单包含它。

于 2012-10-11T03:24:43.130 回答
1

非常感谢你们!

我忽略了我的ECLIPSE 版本,它是64 位和 3.6

我必须确保它是 32 位 Eclipse、32 位 JVM,所以我卸载了 Eclipse 和所有 JVM 以进行干净启动。从这里安装 32Bit JDK1.6 和从这里安装32Bit Eclipse

于 2012-06-14T19:09:15.687 回答
1

如果您正在使用 RCP-SWT 项目,请检查目标定义。

打开目标编辑器并导航到环境定义。在那里你可以设置架构。这个想法是,通过启动您的 RCP 应用程序,然后只会加载 32 位 SWT 库/包。如果您已经有运行时配置,建议您也创建一个新配置。

Eclipse 中的目标编辑器

于 2016-03-08T12:26:41.870 回答
1

所以,只要确保您在正确的环境中,即 32 位 SWT LIBRARIES 应该匹配 32 位 JVM,反之亦然。

我通过安装 64 位 jdk 、64 位 jre 解决了这个问题,最后通过在环境变量中添加设置 jdk 路径并将 jre 添加到 Eclipse 中。

于 2018-04-13T07:02:04.990 回答
1

I removed C:\ProgramData\Oracle\Java\javapath from my path, and it worked for me.

But make sure you include x64 JDK and JRE addresses in your path.

于 2016-06-07T05:10:55.043 回答
0

安装 JDK。

使用 JRE 运行 Eclipse 是可能的,或者至少以前是这样,但是为什么要麻烦呢?Eclipse 对 JDK 更满意。

请记住,用于运行 Eclipse 的 JRE 不必是 Eclipse 用于运行应用程序的 JRE。

PS。我在这里假设原始发布者的问题是让 Eclipse 启动,而不是(正如其他一些答案似乎解决的那样)让 Eclipse 启动应用程序。

于 2014-11-30T03:17:51.433 回答
0

转到路径 C:\ProgramData\Oracle\Java\javapath (在我的情况下,此路径可能与您的情况不同)。使用其他名称行 ORACLE_OLD 重命名文件夹 ORACLE。并重新启动 STS/IDE 。这对我有用

于 2018-03-27T03:42:22.200 回答
-1

我从路径中删除了 C:\ProgramData\Oracle\Java\javapath,它对我有用。完美的答案,谢谢尼基尔。

于 2017-11-16T14:47:11.397 回答