簡體   English   中英

Eclipse:Android項目中JDK類的java.lang.NoClassDefFoundError

[英]Eclipse: java.lang.NoClassDefFoundError for JDK classes in an Android project

首先,我想提一下我讀過很多關於NoClassDefFoundError的 stackoverflow帖子,我也在許多其他博客和網站上閱讀過它,但是人們提供的解決方案並沒有解決它。

我在Ubuntu 12.10 64 位上使用ADT插件版本v21.0.1-543035運行Eclipse 64 一切都是64位,Ubuntu,Eclipse以及我使用的JRE和JDK(jdk1.6.0_38)。

我寫了一個非常小的Android應用程序,需要從JDK運行一個類。

我稍微分離了這個問題,並通過創建一個只有一行MY CODE的新“Android應用程序項目”(在onCreate方法的主類中)重新創建它。 這一行:

BufferedImage buff = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

Eclipse自動添加必要的導入:

import java.awt.image.BufferedImage;

但是要求我為這個類添加jar / JRE。

我在“已安裝的JRE”中將jdk1.6.0_38添加到Eclipse中( 就像他們在Eclipse幫助頁面上指示的那樣 )。

在項目的“Java Build Path”中,我通過“Add library” - >“JRE system library” - >“Workspace default JRE”添加了它。 它自動將JDK添加到項目的構建路徑中。

在編譯期間,我沒有錯誤。 只有在Android模擬器(任何AVD)中運行應用程序時,我才會收到以下錯誤:

E/dalvikvm(828): Could not find class 'java.awt.image.BufferedImage', referenced from method com.example.usejdk.MainActivity.onCreate
W/dalvikvm(828): VFY: unable to resolve new-instance 467 (Ljava/awt/image/BufferedImage;) in Lcom/example/usejdk/MainActivity;
D/dalvikvm(828): VFY: replacing opcode 0x22 at 0x0009
D/dalvikvm(828): DexOpt: unable to opt direct call 0x0cdc at 0x0c in Lcom/example/usejdk/MainActivity;.onCreate
D/AndroidRuntime(828): Shutting down VM
W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
E/AndroidRuntime(828): FATAL EXCEPTION: main
E/AndroidRuntime(828):   java.lang.NoClassDefFoundError: java.awt.image.BufferedImage
E/AndroidRuntime(828):   at com.example.usejdk.MainActivity.onCreate(MainActivity.java:16)
E/AndroidRuntime(828):   at android.app.Activity.performCreate(Activity.java:5104)
E/AndroidRuntime(828):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
E/AndroidRuntime(828):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
E/AndroidRuntime(828):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(828):   at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(828):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(828):   at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(828):   at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(828):   at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(828):   at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(828):   at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(828):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(828):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(828):   at dalvik.system.NativeStart.main(Native Method)

以下是我嘗試過的不起作用的東西:

  1. 將“ eclipse.ini ”添加到jdk的位置(“-vm /usr/lib/jvm/jdk1.6.0_38/bin”在2個單獨的行中)。
  2. 我添加了路徑“-Djava.library.path = / usr / lib / jvm / jdk1.6.0_38 / jre / lib”的“默認VM參數”。
  3. 使用32位JRE和JDK以及JRE / JDK7 - 當然不起作用。
  4. 我嘗試手動將jdk jar文件添加到“libs”文件夾並標記“add to buildpath” - 不起作用。
  5. 我使用ADT和Android SDK再次卸載並安裝了Eclipse ...

沒有什么能解決這個惱人的錯誤......

請注意這些:

  1. 我確保我的.classpath文件包含默認的JRE條目( 就像他們在這里說的那樣
  2. 我嘗試將其他 jar文件添加到“libs”文件夾+“添加到路徑”,並使用它們 - 它工作正常。
  3. 我嘗試使用“import java.awt.image.BufferedImage;”運行相同的代碼(一行) 在一個常規的 Java項目( 不是一個Android項目 ),並使項目“使用默認JRE” - 它工作正常! 為什么它適用於REGULAR Java項目而不適用於Android項目?

我想這意味着我的Eclipse安裝確實能夠使用jdk類,但不能在android應用程序中使用

那么我需要做些什么來使這一行代碼在Android應用程序中運行?

任何幫助都非常值得贊賞。 Thanx提前。

那么我需要做些什么來使這一行代碼在Android應用程序中運行?

簡短的回答是:沒有什么,因為你不能做任何事情。 整個java.awt.*框架不是Android SDK的一部分,包括BufferedImage ,因此不受仿真器或物理設備的支持。 Android有自己的加載和渲染圖形的實現。

如果不知道你需要什么BufferedImage ,很難說你應該考慮什么替代方案。 您很可能嘗試進行某種圖像處理,包括訪問圖像的各個像素? 如果是這種情況,請查看BitmapBitmapFactory類。

這一切都歸結為Java SDK != Android SDK 無論如何,也考慮在這里搜索SO; 你不是第一個犯這個錯誤的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM