Подтвердить что ты не робот

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

Я пытаюсь отладить эту проблему, но не знаю, где именно мне нужно заменить файл SWT jar для 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

Обход проблемы:

  • Link1: Понял причину проблемы, и я попытался заменить 64-битный SWT на 32 бит, но я не уверен, делаете это правильно?

    загружен 32-разрядный файл swt-3.6.1-win32-win32-x86.zip  Извлечен zip файл  Файлы, показанные ниже

    enter image description here

    скопированный файл swt.jar  переход на C:\Program Files\eclipse\plugins  удаленный 64-разрядный Swt файл (i.e 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

    Еще одна ОШИБКА

  • Link2: предложил альтернативное решение, но не смог решить проблему.

    Еще одна ОШИБКА

  • Я действительно не хочу удалять 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

enter image description here

Итак, моя система понимания имеет 64-битную JVM, где Eclispe читает 32-битную JVM. Итак, как я могу переадресовать систему на чтение 32-битного JVM?

4b9b3361

Ответ 1

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

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

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

Installed JREs

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

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

Run Configuration

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

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

Ответ 2

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

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

ИМХО...

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Я пропустил мою версию ECLIPSE VERSION 64Bit и 3.6

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

Ответ 6

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

Ответ 7

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

Вот решение

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

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

Ответ 8

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

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

Редактор цели в Eclipse

Ответ 9

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

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

Ответ 10

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

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

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

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

Ответ 11

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