2012-06-13 39 views
19

Sto tentando di eseguire il debug di questo problema ma non sono sicuro di dove esattamente ho bisogno di sostituire il file SWT jar per Eclipse.Impossibile caricare librerie SWT a 64 bit su JVM a 32 bit (sostituzione del file SWT)

attuale System Config: Messaggio

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

errore:

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 

Soluzione:

  1. Link1: compreso la causa del problema e ho cercato di sostituire 64 bit SWT a 32 bit ma non sono sicuro se lo sto facendo bene?

    scaricato file a 32 bit swt-3.6.1-win32-win32-x86.zip estratto il file zip dispone di file come illustrato di seguito

    enter image description here

    copiato file di swt.jar navigato a C: \ Program Files \ eclipse \ plugins rimosso file di Swt a 64-bit (cioè org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c) s'aggiusta copiato file di swt.jar e rilanciato

    tiri Ancora stesso errore

    provato anche rinominando il file swt.jar a org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c

    Ancora stesso errore

  2. Link2: ha suggerito la soluzione alternativa ma non ha potuto risolvere il problema.

    Ancora stesso errore

  3. Io davvero non voglio disinstallare 32 JVM e 32-bit di Eclipse e installare corrispondenti versioni a 64 bit.

    non è un'opzione

Soluzione Dopo la paulsm4 e Paul Webster risposta & Sono confuso

Quando ho provato l'esecuzione di questo per verificare JVM, versione di JRE in 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")); 

    } 

} 

uscita:

1.6.0_31-b05 
JVM Bit size: 32 

Tuttavia quando ho provato sulla riga di comando per JAVA - VERSIONE

enter image description here

Quindi il mio sistema di comprensione ha 64 bit JVM dove, come Eclispe sta leggendo a 32 bit JVM. Quindi, come posso deviare il sistema per leggere JVM a 32 bit?

+0

Il file che si desidera sostituire è 'org.eclipse.swt.win32.win32.x86_64_3.6.2.v3659c.jar' con swt.jar. Non quello con la fonte nel suo nome. –

+0

Cosa sta generando l'errore? È il tuo Eclipse o l'applicazione che stai sviluppando? –

+0

@PaulWebster: quando ho fatto che Eclispe genera un errore "Si è verificato un errore Vedi il file di registro" –

risposta

27

Eclipse avvia l'applicazione con qualsiasi JRE definito nella configurazione di avvio. Poiché esegui Eclipse a 32 bit, esegui/esegui il debugging delle sue librerie SWT a 32 bit e dovrai eseguire un JRE a 32 bit.

Il JRE a 64 bit è, per qualsiasi motivo, il JRE installato predefinito.

Per modificare questo, assicurarsi di avere un JRE a 32 bit configurato nella preferenza JRE installata. Vai a Window -> Preferenze e passare a Java -> JRE installate:

Installed JREs

È possibile fare clic su Aggiungi e navigare verso la JVM a 32 bit di JAVA_HOME per aggiungerlo.

Poi nella configurazione Run, trova il tuo Eclipse Application e assicurarsi che il runtime JRE è impostato su JRE a 32 bit appena configurato:

Run Configuration

(Si noti la casella combinata che è mal evidenziato.)

Non provare a sostituire i barattoli SWT, che probabilmente si concluderanno male.

+1

Eh? Il messaggio di errore dice "Impossibile caricare librerie SWT a 64 bit su JVM a 32 bit", il che significa che ha bisogno di ottenere un SWT a 32 bit o una JVM a 64 bit. Stai suggerendo di aggiungere una JVM a 32 bit, che ha già. – CodyBugstein

+0

@ Imray In effetti, ne ha già uno, poiché è così che sta eseguendo la sua installazione a 32 bit di Eclipse. Ma ha anche installato un JRE a 64 bit, dato che è il default in Eclipse. Gli sto dicendo di * cambiare il suo JRE predefinito nella versione a 32 bit * in modo che corrisponda a quello che ha lanciato Eclipse e che possa successivamente collegarsi alle librerie SWT a 32 bit. –

+0

Questa risposta è molto fuorviante e non risolve il problema reale. L'errore indica che Eclipse utilizza Java a 32 bit per compilare l'applicazione. Ma il problema è che SWT è a 64 bit !!! Quindi, il problema è che il SWT scaricato non è probabilmente a 32 bit! – roosevelt

8

Bene, duh :) SWT utilizza JNI ... e JNI è strettamente specifico della piattaforma.

Utilizzare librerie a 32 bit con JVM a 32 bit, librerie a 64 bit con JVM a 64 bit, assicurarsi che le versioni corrispondano a esattamente e non mix'n'match.

IMHO ...

PS: È possibile avere più JVM e/o co-esistente di Eclipse multiple sulla stessa macchina.

+0

Io secondo questo. Ottieni semplicemente un'eclissi a 32 bit se hai una JVM a 32 bit. –

1

Grazie mille ragazzi!

ho trascurato il mio ECLIPSE VERSIONE era 64Bit e 3,6

ho dovuto assicurarsi che sia 32Bit Eclipse, a 32 bit JVM così ho disinstallato Eclipse & tutti JVM per l'avvio pulito. Installato 32Bit JDK1.6 da here e 32Bit Eclipse da here

1

Ho appena sostituito il file swt.jar nel mio pacchetto con la versione a 64 bit e ha funzionato subito. Non è necessario ricompilare l'intero pacchetto, basta sostituire il file swt.jar e assicurarsi che il manifest dell'applicazione lo includa.

+0

Dove hai preso l'edizione swt.jar a 32 bit? – CodyBugstein

+0

Hi Imray, dal sito Web [Eclipse] (http://eclipse.org). – sijpkes

1

Ho anche affrontato lo stesso problema molto tempo fa.

Ecco la soluzione

In Eclipse Fare clic su "Windows" -> "Preferenze" ----> "Java" ---> "JRE installati" ----> Selezionare il JDK, clicca su "Modifica".

Controlla il tuo percorso JDK, è secondo il tuo percorso nelle variabili ambientali definite nel sistema. in caso contrario, cambiarlo nella directory definita "percorso".

3

Basta aggiungere -d32 agli argomenti della VM in "Modifica proprietà di configurazione dell'avvio".

0

Installare un JDK.

È possibile ottenere Eclipse per l'esecuzione con un JRE, o almeno lo era, ma perché preoccuparsi? Eclipse è molto più felice con un JDK.

Ricordare che il JRE utilizzato per eseguire Eclipse non deve essere il JRE utilizzato da Eclipse per eseguire un'applicazione.

PS. Presumo qui che il problema del poster originale era l'avvio di Eclipse, e non (come sembrano rispondere ad altre Risposte) ottenere Eclipse per avviare un'applicazione.

5

ho rimosso C: \ ProgramData Oracle \ Java \ JavaPath \ dal mio percorso, e ha funzionato per me.

e assicurarsi di includere gli indirizzi JDK e JRE x64 nel percorso.

+0

Il mio sistema stava funzionando bene prima di un aggiornamento Java. Questo è bastato per farlo funzionare di nuovo. –

1

Controllare la definizione della destinazione se si sta lavorando con un progetto RCP-SWT.

Aprire l'editor di destinazione e navigare nella definizione di ambiente. Lì puoi impostare l'architettura. L'idea è che avviando la tua applicazione RCP verranno caricate solo le librerie/bundle SWT a 32 bit. Se hai già una configurazione runtime, è consigliabile crearne una nuova.

Target Editor in Eclipse

1

ho tolto C: \ ProgramData \ Oracle \ Java \ JavaPath dal mio cammino, e ha funzionato per me.

Ma assicurati di includere gli indirizzi JDK e JRE x64 nel tuo percorso.

-1

Ho rimosso C: \ ProgramData \ Oracle \ Java \ javapath dal mio percorso e ha funzionato per me. Risposta perfetta, grazie Nikil.

Problemi correlati