![](/img/trans.png)
[英]Android and Eclipse - java.lang.NoClassDefFoundError with project dependency
[英]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)
以下是我嘗試過的不起作用的東西:
沒有什么能解決這個惱人的錯誤......
請注意這些:
我想這意味着我的Eclipse安裝確實能夠使用jdk類,但不能在android應用程序中使用 。
那么我需要做些什么來使這一行代碼在Android應用程序中運行?
任何幫助都非常值得贊賞。 Thanx提前。
那么我需要做些什么來使這一行代碼在Android應用程序中運行?
簡短的回答是:沒有什么,因為你不能做任何事情。 整個java.awt.*
框架不是Android SDK的一部分,包括BufferedImage
,因此不受仿真器或物理設備的支持。 Android有自己的加載和渲染圖形的實現。
如果不知道你需要什么BufferedImage
,很難說你應該考慮什么替代方案。 您很可能嘗試進行某種圖像處理,包括訪問圖像的各個像素? 如果是這種情況,請查看Bitmap
和BitmapFactory
類。
這一切都歸結為Java SDK != Android SDK
。 無論如何,也考慮在這里搜索SO; 你不是第一個犯這個錯誤的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.