2017-09-13 132 views
-2

我一直在使用下面的代码来设置在Android的JPEG图像的DPI。 当打开我的应用程序时,它应该崩溃,就像不幸的应用程序已停止。 这里是我的代码:如何解决java.lang.NoClassDefFoundError:sun.awt.AppContext在android

import ae.java.awt.image.BufferedImage; 
import ae.javax.imageio.IIOImage; 
import ae.javax.imageio.ImageIO; 
import ae.javax.imageio.ImageTypeSpecifier; 
import ae.javax.imageio.ImageWriter; 
import ae.javax.imageio.metadata.IIOInvalidTreeException; 
import ae.javax.imageio.metadata.IIOMetadata; 
import ae.javax.imageio.stream.ImageOutputStream; 

private void setDPIJPEG() { 

     int dpi = 100; 
     File infile = new File(ScanConstants.IMAGE_RESULTS,"grayImages.jpg"); 
     File outfile = new File(ScanConstants.IMAGE_RESULTS,"density.jpg"); 
     try { 

      BufferedImage sourceImage = ImageIO.read(infile); 

      ImageWriter imageWriter = ImageIO.getImageWritersBySuffix("jpeg").next(); 
      ImageOutputStream ios = ImageIO.createImageOutputStream(outfile); 
      imageWriter.setOutput(ios); 

      IIOMetadata data = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(sourceImage), null); 

      Element tree = (Element) data.getAsTree("javax_imageio_jpeg_image_1.0"); 
      Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0); 
      jfif.setAttribute("Xdensity", Integer.toString(dpi)); 
      jfif.setAttribute("Ydensity", Integer.toString(dpi)); 

      jfif.setAttribute("resUnits", "1"); // density is dots per inch 
      data.mergeTree("javax_imageio_jpeg_image_1.0", tree); 

      imageWriter.write(data, new IIOImage(sourceImage, null, data), null); 
      ios.close(); 
      imageWriter.dispose(); 

     } catch (IIOInvalidTreeException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

我有以下错误:

09-13 16:29:30.548 29368-29368/com.scanner.demo E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.scanner.demo, PID: 29368 
                    java.lang.NoClassDefFoundError: sun.awt.AppContext 
                     at ae.javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:155) 
                     at ae.javax.imageio.ImageIO.<clinit>(ImageIO.java:65) 
                     at com.scanlibrary.ResultFragment.setDPIJPEG(ResultFragment.java:269) 
                     at com.scanlibrary.ResultFragment.access$600(ResultFragment.java:46) 
                     at com.scanlibrary.ResultFragment$1.onClick(ResultFragment.java:129) 
                     at android.view.View.performClick(View.java:4633) 
                     at android.view.View$PerformClick.run(View.java:19274) 
                     at android.os.Handler.handleCallback(Handler.java:733) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:146) 
                     at android.app.ActivityThread.main(ActivityThread.java:5593) 
                     at java.lang.reflect.Method.invokeNative(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:515) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                     at dalvik.system.NativeStart.main(Native Method) 

这里是我的build.gradle文件

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.3' 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
     ndk 
       { 
        moduleName "Scanner" 

       } 
     multiDexEnabled true 
    } 
    sourceSets.main 
      { 
       jni.srcDirs = [] 
       jniLibs.srcDir 'src/main/libs' 
      } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.github.beyka:androidtiffbitmapfactory:0.9.7.6' 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    compile project(path: ':openCVLibrary310') 
    compile 'com.android.support:multidex:1.0.1' 
    compile files('libs/ae-awt.jar') 
} 

这里是扫描库是在我的应用程序一个模块。 如何解决它。 如果有人知道,请帮助我。 我正在使用Android Studio 2.3.3 java 1.8。

+0

AWT不适用于Android – EpicPandaForce

+0

您可以发布您的gradle文件 –

回答

0

com.scanlibrary未设置为与Android一起使用。如果这是第三方代码,请切换到适用于Android的库。

如果com.scanlibrary代码...您已经导入了一堆ae类不属于Android的SDK的一部分。这些类依次包含对JDK中不属于Android的类的引用(例如,sun.awt.AppContext)。因此,ae类不能与Android配合使用。切换到适用于Android的图书​​馆。

+0

我只需下载ae-awt.jar文件并将其放置到scanlibrary的libs文件夹中。如何切换到库。 – amarlucky

+0

@amarlucky:我不知道JAR是什么,它来自哪里或什么。它不适合与Android一起工作,因为它需要Android没有的类。找到另一种解决方案,或者自己写下全部内容 – CommonsWare