Невозможно загрузить 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: Понял причину проблемы, и я попытался заменить 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: Предложил альтернативное решение, но не смог решить проблему.
Все та же ОШИБКА
Я действительно не хочу удалять 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:
Вы можете нажать кнопку "Добавить" и перейти к 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 к аргументам виртуальной машины в "Редактировать свойства конфигурации запуска".
Я удалил 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. Если у вас уже есть конфигурация во время выполнения, желательно также создать новую.
Итак, просто убедитесь, что вы находитесь в правильной среде, т.е. 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 из моего пути, и он работал для меня. Идеальный ответ, спасибо Никиль.