2012-06-13 95 views
19

我試圖調試此問題,但並不確定在哪裏需要替換爲Eclipse的SWT jar文件。無法在32位JVM上加載64位SWT庫(替換SWT文件)

當前系統配置:

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. Link1:理解問題的原因,我試圖取代64位SWT到32位,但我不知道我是否做對了嗎?

    下載32位文件swt-3.6.1-win32-win32-x86.zip 提取的壓縮文件 有無文件如下所示

    enter image description here

    導航到複製文件SWT.JAR C:\ Program Files文件\蝕\插件 除去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. Link2:建議替代解決方案,但無法解決問題。

    還是同樣的錯誤

  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

enter image description here

所以我的理解系統有64位JVM,其中作爲Eclispe的是讀32位JVM。那麼我如何轉移系統來讀取32位JVM?

+0

您要替換的文件是帶有swt.jar的'org.eclipse.swt.win32.win32.x86_64_3.6.2.v3659c.jar'。不是那個有名字的人。 –

+0

什麼引起了錯誤?它是你的Eclipse還是你正在開發的應用程序? –

+0

@PaulWebster:當我這樣做時,Eclispe拋出一個錯誤「發生了一個錯誤。請參閱日誌文件」 –

回答

27

Eclipse使用您在啓動配置中定義的任何JRE啓動應用程序。由於您正在運行32位Eclipse,因此您正在針對其32位SWT庫運行/調試,並且需要運行32位JRE。

無論出於何種原因,您的64位JRE都是默認安裝的JRE。

要改變這種情況,首先要確保在Installed JREs首選項中配置了一個32位JRE。去窗口 - >首選項,然後導航到Java - >安裝的JRE:

Installed JREs

您可以點擊添加並瀏覽到您的32位JVM的JAVA_HOME添加它。

然後在你的運行配置,找到你的Eclipse應用程序,並確保運行時JRE設置爲剛配置的32位JRE:

Run Configuration

(請注意,突出顯示不佳組合框。 )

不要試圖更換SWT罐子,這可能會結束不佳。

+1

咦?錯誤消息說'無法在32位JVM上加載64位SWT庫,這意味着他需要獲得32位SWT或64位JVM。你建議他添加一個他已有的32位JVM。 – CodyBugstein

+0

@Imray事實上,他已經擁有了一個,因爲這就是他如何運行他的32位Eclipse安裝。但是他還安裝了64位JRE,因爲這是Eclipse中的默認設置。我告訴他*將他的默認JRE更改爲32位版本*,以便它與啓動Eclipse的那個匹配,然後他可以鏈接到32位SWT庫。 –

+0

這個答案很具誤導性,並不能解決實際問題。錯誤表示Eclipse正在使用32位Java編譯應用程序。但問題是SWT是在64位!所以,問題是下載的SWT可能不是32位! – roosevelt

8

嗯,嗯:) SWT使用JNI ...和JNI嚴格平臺特定。

使用帶有32位JVM的32位庫,帶有64位JVM的64位庫,確保版本匹配,確切地說,並且不混合'n'匹配。

恕我直言...

PS: 你可以有多個JVM和/或多個Eclipse的共存於同一個盒子。

+0

我第二次。如果你有一個32位的JVM,只需要獲得一個32位的eclipse。 –

1

非常感謝你們!

我忽略了我的Eclipse版本64位和3.6

我必須確保它是32位的Eclipse,32位JVM,所以我卸載的Eclipse &所有JVM清潔開始。從here和32Bit Eclipse安裝32Bit JDK1.6從here

1

我剛剛用64位版本替換了我的軟件包中的swt.jar,它馬上就能正常工作。無需重新編譯整個軟件包,只需更換swt.jar文件並確保您的應用程序清單包含它。

+0

你從哪裏得到swt.jar 32位版本? – CodyBugstein

+0

嗨Imray,來自[Eclipse](http://eclipse.org)網站。 – sijpkes

1

很久以前我也面臨同樣的問題。

下面是解

在Eclipse中單擊 「窗口」 - > 「首選項」 - > 「的Java」 ---> 「已安裝的JRE」 ---->選擇了JDK,點擊「編輯」。

檢查您的JDK路徑,是否根據您在系統中定義的環境變量的路徑。 如果沒有,則將其更改爲「路徑」定義的目錄。

3

只需在「編輯啓動配置屬性」中將-d32添加到VM參數即可。

0

安裝JDK。

可能讓Eclipse運行JRE,或者至少它曾經是,但爲什麼要麻煩? Eclipse對JDK更加快樂。

請記住,用於運行Eclipse的JRE並不一定是Eclipse用來運行應用程序的JRE。

PS。我在這裏假設原始海報的問題是讓Eclipse開始,而不是(如其他一些答案似乎要解決的問題)讓Eclipse啓動一個應用程序。

5

我刪除 C:\ ProgramData \ ORACLE \的Java \ javapath 在我的道路,它爲我工作。

並確保在路徑中包含x64 JDK和JRE地址。

+0

我的系統在Java更新之前工作正常。這就是讓它重新工作所需要的一切。 –

1

如果您正在使用RCP-SWT項目,請檢查目標定義。

打開目標編輯器並導航到environent定義。在那裏你可以設置架構。這個想法是通過啓動你的RCP應用程序,然後只加載32位的SWT庫/ bundle。如果您已經有運行時配置,建議您也創建一個新配置。

Target Editor in Eclipse

1

我刪除C:\ ProgramData \ ORACLE \的Java \ javapath在我的道路,它爲我工作。

但請確保在路徑中包含x64 JDK和JRE地址。

-1

我從我的路徑中刪除了C:\ ProgramData \ Oracle \ Java \ javapath,它對我很有用。 完美答案,謝謝Nikil。

相關問題