web-dev-qa-db-fra.com

Impossible de charger les bibliothèques SWT 64 bits sur JVM 32 bits (remplacement du fichier SWT)

J'essaie de déboguer ce problème mais je ne sais pas exactement où je dois remplacer le fichier SWT jar pour Eclipse.

Configuration système actuelle:

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

Message d'erreur:

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

Solution de contournement:

  1. Link1 : J'ai compris la cause du problème et j'ai essayé de remplacer le SWT 64 bits en 32 bits mais je ne sais pas si je le fais bien?

    téléchargé le fichier 32 bits swt-3.6.1-win32-win32-x86.Zip Extrait le fichier Zip Avoir les fichiers comme indiqué ci-dessous

    enter image description here

    fichier swt.jar copié navigué vers C:\Program Files\Eclipse\plugins fichier Swt 64 bits supprimé (c'est-à-dire org.Eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c) placé le fichier swt.jar copié et relancé

    Lance toujours la même erreur

    a également essayé de renommer le fichier swt.jar en org.Eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c

    Toujours la même ERREUR

  2. Link2 : A suggéré la solution alternative mais n'a pas pu résoudre le problème.

    Toujours la même ERREUR

  3. Je ne veux vraiment pas désinstaller 32-JVM et Eclipse 32 bits et installer les versions 64 bits correspondantes.

    Pas une OPTION

Solution après la paulsm4 et réponse de Paul Webster & je suis confus

Quand j'ai essayé de l'exécuter pour vérifier la version JVM, JRE dans 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" ) );

    }

}

Sortie:

1.6.0_31-b05
JVM Bit size: 32

Cependant, quand j'ai essayé en ligne de commande pour Java - VERSION

enter image description here

Donc, mon système de compréhension a une JVM 64 bits alors qu'Eclispe lit une JVM 32 bits. Alors, comment puis-je détourner le système pour lire la JVM 32 bits?

23
Mad-D

Eclipse lance votre application avec le JRE que vous avez défini dans votre configuration de lancement. Comme vous exécutez Eclipse 32 bits, vous exécutez/déboguez avec ses bibliothèques SWT 32 bits et vous devrez exécuter un JRE 32 bits.

Votre JRE 64 bits est, pour une raison quelconque, votre JRE installé par défaut.

Pour changer cela, assurez-vous d'abord que vous disposez d'un JRE 32 bits configuré dans la préférence JRE installés. Allez dans Fenêtre -> Préférences et accédez à Java -> JRE installés:

Installed JREs

Vous pouvez cliquer sur Ajouter et accéder à votre JVM 32 bits Java_HOME pour l'ajouter.

Ensuite, dans votre configuration d'exécution, recherchez votre application Eclipse et assurez-vous que le JRE d'exécution est défini sur le JRE 32 bits que vous venez de configurer:

Run Configuration

(Notez la zone de liste déroulante qui est mal mise en évidence.)

N'essayez pas de remplacer les bocaux SWT, cela se terminera probablement mal.

27
Edward Thomson

Eh bien, duh :) SWT utilise JNI ... et JNI est strictement spécifique à la plate-forme.

Utilisez des bibliothèques 32 bits avec une JVM 32 bits, des bibliothèques 64 bits avec une JVM 64 bits, assurez-vous que les versions correspondent à exactement, et ne mélangez pas.

A MON HUMBLE AVIS...

PS: Vous pouvez avoir plusieurs JVM et/ou plusieurs Eclipse coexistant sur le même boîtier.

8
paulsm4

j'ai supprimé C:\ProgramData\Oracle\Java\javapath de mon chemin, et cela a fonctionné pour moi.

et assurez-vous d'inclure des adresses JDK et JRE x64 dans votre chemin.

6
Parviz

Ajoutez simplement -d32 à VM arguments dans "Modifier les propriétés de configuration de lancement".

3
Pascal Peregrina

Merci beaucoup les gars!

J'ai oublié ma VERSION Eclipse c'était 64Bit et 3.6

Je devais m'assurer que c'était Eclipse 32 bits, JVM 32 bits, j'ai donc désinstallé Eclipse et toutes les JVM pour un démarrage en douceur. Installé 32Bit JDK1.6 de ici et 32Bit Eclipse de ici

1
Mad-D

J'ai supprimé C:\ProgramData\Oracle\Java\javapath de mon chemin et cela a fonctionné pour moi.

Mais assurez-vous d'inclure les adresses JDK et JRE x64 dans votre chemin.

1
Nikhil

J'ai également fait face au même problème il y a longtemps.

Voici la solution

Dans Eclipse, cliquez sur "Windows" -> "Préférences" ----> "Java" ---> "JRE installés" ----> Sélectionnez le JDK, cliquez sur "Modifier".

Vérifiez votre chemin JDK, est-il en fonction de votre chemin dans les variables d'environnement définies dans le système. sinon, changez-le en répertoire défini par "chemin".

1
Chandan Jha

Donc, assurez-vous simplement que vous êtes dans le bon environnement, c'est-à-dire que les bibliothèques SWT 32 bits doivent correspondre à la JVM 32 bits, et vice versa.

J'ai résolu ce problème en installant jdk 64 bits, jre 64 bits et enfin en ajoutant la définition du chemin jdk dans les variables d'environnement et l'ajout de jre à Eclipse.

1
Karthik

Je viens de remplacer le swt.jar dans mon package par la version 64 bits et cela a fonctionné immédiatement. Pas besoin de recompiler l'ensemble du package, remplacez simplement le fichier swt.jar et assurez-vous que le manifeste de votre application l'inclut.

1
sijpkes

Vérifiez la définition cible si vous travaillez avec un projet RCP-SWT.

Ouvrez l'éditeur cible de et accédez à la définition de l'environnement. Là, vous pouvez définir l'architecture. L'idée est qu'en démarrant votre application RCP, seules les bibliothèques/bundles SWT 32 bits seront chargés. Si vous avez déjà une configuration d'exécution, il est conseillé d'en créer une nouvelle également.

Target Editor in Eclipse

1
Georgios Stathis

Accédez au chemin C:\ProgramData\Oracle\Java\javapath (ce chemin est dans mon cas peut être différent dans votre cas). Renommez le dossier Oracle avec une autre ligne de nom Oracle_OLD. Et redémarrez le STS/IDE. Ça marche pour moi

0
rahulnikhare

Installez un JDK.

Il est possible de faire fonctionner Eclipse avec un JRE, ou du moins c'était le cas auparavant, mais pourquoi s'embêter? Eclipse est beaucoup plus heureux avec un JDK.

N'oubliez pas que le JRE utilisé pour exécuter Eclipse ne doit pas nécessairement être le JRE utilisé par Eclipse pour exécuter une application.

PS. Je suppose ici que le problème de l'affiche d'origine était de faire démarrer Eclipse, et non pas (comme certaines réponses semblent le résoudre) de faire en sorte qu'Eclipse démarre une application.

0
Ben Aveling