Невозможно загрузить 64-битные библиотеки SWT на 32-битной JVM (замена файла SWT)

Я пытаюсь отладить эту проблему, но не уверен, где именно мне нужно заменить файл фляги SWT для Eclipse.

Текущая конфигурация системы:

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. Ссылка 1: Понял причину проблемы, и я попытался заменить 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. Ссылка 2: Предложил альтернативное решение, но не смог решить проблему.

    Все та же ОШИБКА

  3. Я действительно не хочу удалять 32-JVM и 32-разрядную версию Eclipse и устанавливать соответствующие 64-разрядные версии.

    Не вариант

Обходной путь После ответа paulsm4 и Пола Вебстера, и я запутался

Когда я попытался выполнить это, чтобы проверить JVM, версия JRE в Eclipse

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?

13 ответов

Решение

Eclipse запускает ваше приложение с любой JRE, которую вы определили в конфигурации запуска. Поскольку вы работаете с 32-битным Eclipse, вы запускаете / отлаживаете его 32-битные библиотеки SWT, и вам нужно запустить 32-битную JRE.

Ваша 64-битная JRE по любой причине является вашей установленной по умолчанию JRE.

Чтобы изменить это, сначала убедитесь, что у вас настроен 32-битный JRE в предпочтении Установленные JRE. Перейдите в Окно -> Настройки и перейдите к Java -> Установленные JRE:

Установленные JRE

Вы можете нажать кнопку "Добавить" и перейти к 32-разрядной JVM. JAVA_HOME добавить это.

Затем в своей конфигурации запуска найдите приложение Eclipse и убедитесь, что для среды выполнения JRE задано 32-разрядное JRE, которое вы только что настроили:

Запустить конфигурацию

(Обратите внимание на поле со списком, которое плохо выделено.)

Не пытайтесь заменить банки SWT, которые, скорее всего, плохо кончатся.

Я удалилC:\ProgramData\Oracle\Java\javapath из моего пути, и это сработало для меня.

и убедитесь, что вы включили адреса x64 JDK и JRE в свой путь.

Ну, да:) SWT использует JNI ... а JNI строго зависит от платформы.

Используйте 32-битные библиотеки с 32-битной JVM, 64-битные библиотеки с 64-битной JVM, убедитесь, что версии точно совпадают, и не смешивайте.

ПО МОЕМУ МНЕНИЮ...

PS: Вы можете иметь несколько JVM и / или несколько Eclipse, сосуществующих в одной коробке.

Просто добавьте -d32 к аргументам виртуальной машины в "Редактировать свойства конфигурации запуска".

Большое спасибо, ребята!

Я пропустил ВЕРСИЮ ЗАТМЕНИЯ, это было 64Bit и 3,6

Я должен был убедиться, что это 32-битное Eclipse, 32-битная JVM, поэтому я удалил Eclipse и все JVM для чистого запуска. Установил 32-битный JDK1.6 отсюда и 32-битный Eclipse отсюда

Я удалил C:\ProgramData\Oracle\Java\javapath из моего пути, и он работал для меня.

Но убедитесь, что вы включили адреса x64 JDK и JRE в свой путь.

Я просто заменил swt.jar в своем пакете на 64-битную версию, и она сразу заработала. Не нужно перекомпилировать весь пакет, просто замените файл swt.jar и убедитесь, что манифест приложения содержит его.

Я также столкнулся с той же проблемой давным-давно.

Вот решение

В Eclipse нажмите "Windows"-> "Настройки"---->"Java"---> "Установленные JRE" ----> Выберите JDK, нажмите "Изменить".

Проверьте ваш путь JDK, соответствует ли он вашему пути в переменных среды, определенных в системе. если нет, то измените его на каталог, указанный в path.

Проверьте определение цели, если вы работаете с проектом RCP-SWT.

Откройте целевой редактор и перейдите к определению среды. Там вы можете установить архитектуру. Идея состоит в том, что при запуске приложения RCP будут загружаться только 32-битные библиотеки / пакеты SWT. Если у вас уже есть конфигурация во время выполнения, желательно также создать новую.

Целевой редактор в Eclipse

Итак, просто убедитесь, что вы находитесь в правильной среде, т.е. 32-битные SWT LIBRARIES должны соответствовать 32-битной JVM, и наоборот.

Я решил эту проблему, установив 64-битный jdk,64-битный jre и, наконец, добавив установку пути jdk в переменных среды и добавив jre к затмению.

Перейдите к пути C:\ProgramData\Oracle\Java\javapath (этот путь в моем случае может отличаться в вашем случае). Переименуйте папку ORACLE с другой строкой имени ORACLE_OLD. И перезапустите STS/IDE . Это работает для меня

Установите JDK.

Можно заставить Eclipse работать с JRE, или, по крайней мере, раньше, но зачем? Затмение намного счастливее с JDK.

Помните, что JRE, которая используется для запуска Eclipse, не обязательно должна быть JRE, которую Eclipse использует для запуска приложения.

PS. Здесь я предполагаю, что проблема первоначального автора заключалась в том, чтобы запустить Eclipse, а не в том (как, кажется, некоторые другие ответы) обращаются к Eclipse для запуска приложения.

Я удалил C:\ProgramData\Oracle\Java\javapath из моего пути, и он работал для меня. Идеальный ответ, спасибо Никиль.

Другие вопросы по тегам