2014-06-21 30 views
0

我的代码需要在Linux机器和Android移动设备之间迁移。它执行基本的图像处理,并使用Linux上的ImageIO和Android上的BitmapFactory来加载jpeg图像。所以,我发现环境和调用适当的方法如下:使用不同的库在Android和JVM上执行SAME程序

if (isDalvik()) { 
     Bitmap bi = BitmapFactory.decodeStream(this.getClass().getResourceAsStream("test.jpg"));                       
     this.findFaces_Android(bi, 1, 40, new File("result.jpg")); 
    } else { 
    BufferedImage bi = ImageIO.read(Exp_Starter.class.getResourceAsStream("test.jpg")); 
    this.findFaces_J2SE(bi, 1, 40, new File("result.jpg")); 
    } 

因为我已经放在的android.jar在类路径。这在Linux上工作正常。但是,它无法在Android上运行。在启动时,声明无法找到BufferedImage和ImageIO类,尽管它们实际上从未被调用,因为else语句将不会被执行。

我试图为Android应用程序创建java.awt.image.BufferedImage和javax.imageio.ImageIO的空类,但编译器不允许覆盖它们。

有关如何解决此问题并使SAME程序在两种不同环境中均可工作的任何想法?

+0

您是否需要像在Linux上一样将这些jar添加到类路径中? – TheNorthWes

+1

尝试将else部分移动到单独的方法中。 –

+0

代码首先编译为错误,然后执行。在编译时,它不检查if-else,它只转换语句。所以即使它不需要执行bufferedImage和ImageIO,它仍然需要类。因此你得到一个错误。 – Aradhna

回答

0

显然,将不同的运行时环境的代码移到不同的类可以解决问题。下面是对我有用的东西:

if (isDalvik()) { 
    Find_Faces_Android ff = new Find_Faces_Android(); 
    ff.readImage(this.getClass().getResourceAsStream("test.jpg")); 
    int no_detected_faces = ff.findFaces(1, 40, new File("result.jpg")); 
} else { 
    Find_Faces_JVM ff = new Find_Faces_JVM(); 
    ff.readImage(this.getClass().getResourceAsStream("test.jpg")); 
    int no_detected_faces = ff.findFaces(1, 40, new File("result.jpg")); 
} 
相关问题