java - Zxing上编译错误

标签 java compiler-errors g1gc

由于我没有用于开发目的的 G1,因此我会尽力使用模拟器。 也就是说,我正在尝试使用 ZXing (Zebra Zrossing) 库扫描 sdCard 中的 JPEG 图像或 PNG 图像。

我尝试更改 Android 项目中的代码,以便它从 sdCard 中的图像扫描,而不是从相机扫描,但没有任何运气。

我接下来所做的可能是我的问题的根源。

我尝试在新的 Android 项目中使用 JAVASE 代码,为“修改后的”CommandLineRunner 提供图像,事情是这样的:

Eclipse 将构建该项目,但不会运行它。 VM 日志向我显示了以下消息:

**02-08 20:47:45.916: WARN/dalvikvm(619): VFY: unable to resolve static method 939: Ljavax/imageio/ImageIO;.read (Ljava/io/File;)Ljava/awt/image/BufferedImage; 02-08 20:47:45.926: WARN/dalvikvm(619): VFY: rejecting opcode 0x71 at 0x0004 02-08 20:47:45.926: WARN/dalvikvm(619): VFY: rejected Lcom/magoco/fread/FRead;.decode2 (Ljava/io/File;Ljava/util/Hashtable;Ljava/lang/String;)Ljava/lang/String; 02-08 20:47:45.926: WARN/dalvikvm(619): Verifier rejected class Lcom/magoco/fread/FRead; 02-08 20:47:45.926: WARN/dalvikvm(619): Class init failed in newInstance call (Lcom/magoco/fread/FRead;) 02-08 20:47:45.926: DEBUG/AndroidRuntime(619): Shutting down VM 02-08 20:47:45.926: WARN/dalvikvm(619): threadid=3: thread exiting with uncaught exception (group=0x40010e28) 02-08 20:47:45.937: ERROR/AndroidRuntime(619): Uncaught handler: thread main exiting due to uncaught exception 02-08 20:47:45.946: ERROR/AndroidRuntime(619): java.lang.VerifyError: com.magoco.fread.FRead **

我在网上搜索了答案,有人说这是 Dalvikvm 上的常见错误,因为可能存在预编译的类或库(确实,在 Eclipse 之外),而 VM 不会这样做无法使用它。

我在主 Activity 中发布我的代码:

package com.magoco.fread;

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;

import com.google.zxing.DecodeHintType;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.result.ParsedResult;
import com.google.zxing.client.result.ResultParser;

public class FRead extends Activity {
    /** Called when the activity is first created. */
    @Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView tv = (TextView) this.findViewById(R.id.BarcodeResult);
    try {
        tv.setText(this.decodeOneArgument2("", false));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String decodeOneArgument2(String argument, boolean dumpResults)
        throws Exception {
    String barcode = "";
    // File inputFile = new File(argument);
    File inputFile = new File("sdcard/dcim/pueblo.JPG");

    /* TESTING THAT I'VE GOT A FILE */
    System.out.println("FILE " + inputFile.toString());

    // decode(new URI(argument), hints);
    decode2(inputFile, null, barcode);
    return barcode;

}

public String decode2(File f, Hashtable<DecodeHintType, Object> hints,
        String barcode) throws IOException {

    /* IF I COMMENT THE NEXT LINE, IT RUNS BUT OF COURSE NO RESULT */
    BufferedImage image;
    try {
        image = ImageIO.read(f);
    } catch (IllegalArgumentException iae) {
        throw new FileNotFoundException("Resource not found: " + f);
    }
    try {
        MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(
                image);
        Result result = new MultiFormatReader().decode(source, hints);
        ParsedResult parsedResult = ResultParser.parseResult(result);
        barcode = " format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult();
        System.out.println(" format: " + result.getBarcodeFormat()+ result.getText() + "\nParsed result:\n"+ parsedResult.getDisplayResult());
        //return result;
    } catch (ReaderException e) {
        System.out.println(": No barcode found");
        return null;
    }
    return barcode;
}

}

提前致谢

monn3t

最佳答案

海, 我尝试从条形码中提取数据,这些是我遵循的步骤。

1.下载ZXing 1.3并解压。

2.通过设置属性,将解压后的zxing floder中的core/src和androidtest/src添加到android应用程序中。 使用此链接设置属性,http://groups.google.com/group/zxing/browse_thread/thread/7d8693e6e42408f2

现在包含以下代码,

package payoda.android.zxingApp;
import android.app.Activity;
import android.database.CursorJoiner.Result;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.client.androidtest.*;
import com.google.zxing.common.BaseMonochromeBitmapSource;


public class ZXingApplication1 extends Activity 
{
  TextView tv;
  com.google.zxing.Result result;

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv=(TextView)findViewById(R.id.text);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bar2); 
    MultiFormatReader reader1=new MultiFormatReader();//For all barcode formats
    QRCodeReader reader=new QRCodeReader();//Only for QRCode format

   try 
    {

       result=reader1.decode(new RGBMonochromeBitmapSource(bitmap));
       tv.setText(result.getText());
    } 
    catch (Exception e) 
    {   
        tv.setText("Within Catch block");
     } 
  }
 }

这可能对您有帮助。

关于java - Zxing上编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526866/

相关文章:

java - 数组中的输出格式以及如何在 for 循环之外获取值

java - 防止支持库的 Gradle 依赖被新版本覆盖

java - G1GC中如何触发Old Generation的回收

css - Sass: "&"和 "@at-root"不能混用?

java - Java VM 何时支持 Linux ARM 的垃圾优先 (G1) 收集器?

java - 如何从g1gc日志计算对象升级率?

java - 从连接 Java 中的 SQL 字符串转移到 PreparedStatement

java - 运行 Hadoop MapReduce 作业时获取文件名/文件数据作为 Map 的键/值输入

java - 内部编译器错误?

c++ - 从 'int'类型的返回值到函数返回类型( vector )没有可行的转换