【问题标题】:Android + jfreeSVG: inheritance issuesAndroid + jfreeSVG:继承问题
【发布时间】:2016-11-02 08:41:16
【问题描述】:

我正在使用 Android Studio 开发 Android 应用程序。这个应用程序使用了一个全 Java 库模块。我通过将 compile 'org.jfree:jfreesvg:3.1' 添加到所述 java 库模块的依赖项中来包含 jfreesvg

在那个 java 库中,我正在尝试主 doc 中的给定示例,用于 SVGGraphics2D

    SVGGraphics2D g2 = new SVGGraphics2D(300, 200);
    g2.setPaint(Color.black);
    g2.draw(new Rectangle(10, 10, 280, 180));
    String svgElement = g2.getSVGElement();

但是,我在 Android Studio 中遇到了两个编译错误,第一个出现在第二行: setPaint(java.awt.Paint) in SVGGraphics2D cannot be applied to (java.awt.Color)

另外,在下一行中,出现以下错误,我想是同样的原因,发生:draw(java.awt.Paint) in SVGGraphics2D cannot be applied to (java.awt.Color)

我现在的问题是:即使java.awt.Paint 是一个接口并且java.awt.Color 是该接口的一个实现,为什么我会收到该错误(java.awt.Shapejava.awt.Rectangle 也是如此)?

为了完成:如果我确实运行了应用程序,但我对它的工作原理感到困惑,我会收到以下异常:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: [package].app, PID: 19596
java.lang.RuntimeException: An error occured while executing doInBackground()
   at android.os.AsyncTask$3.done(AsyncTask.java:300)
   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
   at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:811)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jfree/graphics2d/svg/SVGGraphics2D;
   at [package].[some.package].someMethod(Unknown)
   at [package].app.MainActivity$SomeTask.doInBackground(MainActivity.java:67)
   at [package].app.MainActivity$SomeTask.doInBackground(MainActivity.java:62)
   at android.os.AsyncTask$2.call(AsyncTask.java:288)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
   at java.lang.Thread.run(Thread.java:811) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jfree.graphics2d.svg.SVGGraphics2D" on path: DexPathList[[zip file "/data/app/[package].app-2.apk"],nativeLibraryDirectories=[/data/app-lib/[package].app-2, /system/lib, /vendor/lib, /system/lib]]
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
   at [package].[some.package].someMethod(Unknown) 
   at [package].app.MainActivity$SomeTask.doInBackground(MainActivity.java:67) 
   at [package].app.MainActivity$SomeTask.doInBackground(MainActivity.java:62) 
   at android.os.AsyncTask$2.call(AsyncTask.java:288) 
   at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
   at java.lang.Thread.run(Thread.java:811) 
    Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/Graphics2D;
   at dalvik.system.DexFile.defineClassNative(Native Method)
   at dalvik.system.DexFile.defineClass(DexFile.java:222)
   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:215)
   at dalvik.system.DexPathList.findClass(DexPathList.java:322)
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
        ... 11 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.awt.Graphics2D" on path: DexPathList[[zip file "/data/app/[package].app-2.apk"],nativeLibraryDirectories=[/data/app-lib/[package].app-2, /system/lib, /vendor/lib, /system/lib]]
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        ... 16 more
        Suppressed: java.lang.ClassNotFoundException: java.awt.Graphics2D
   at java.lang.Class.classForName(Native Method)
   at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 17 more
Caused by: java.lang.NoClassDefFoundError: Class "Ljava/awt/Graphics2D;" not found
            ... 21 more
    Suppressed: java.lang.ClassNotFoundException: org.jfree.graphics2d.svg.SVGGraphics2D
   at java.lang.Class.classForName(Native Method)
   at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 10 more
Caused by: java.lang.NoClassDefFoundError: Class "Lorg/jfree/graphics2d/svg/SVGGraphics2D;" not found
        ... 14 more

(我编辑了堆栈跟踪以提高可读性。)

【问题讨论】:

    标签: java android svg


    【解决方案1】:

    java.awt.* 包在 Android 中不可用。因此,您尝试使用的库不能直接在您的 Android 应用程序中使用。至少不是没有进一步的工作。

    您需要自己实现这些类,或者从其他地方(例如 Apache Harmony 项目)获取它们。

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多