Java 类型不匹配:无法从ByteMatrix转换为BitMatrix

Java 类型不匹配:无法从ByteMatrix转换为BitMatrix,java,zxing,type-mismatch,Java,Zxing,Type Mismatch,我正在使用ZXING库用JAVA创建一个二维码生成器程序。节目是 import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeW

我正在使用ZXING库用JAVA创建一个二维码生成器程序。节目是

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;


public class QR_Gen {
    private static final String QR_CODE_IMAGE_PATH = "./MyCode.png";

    private static void generateQRCodeImage(String text, int width, int 
height, String filePath) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, 
BarcodeFormat.QR_CODE, width, height);
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

    }
    public static void main(String[] args) {
        try {
            generateQRCodeImage("This is my first QR Code", 350, 350, QR_CODE_IMAGE_PATH);
            System.out.println("QR Code generated successfully");
        } catch (WriterException e) {

            System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());
        }
    }

}
编译此程序时,我遇到一个类型不匹配错误

Type mismatch: cannot convert from ByteMatrix to BitMatrix
在这一行

BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

请帮忙

我本人从未使用过这个库,但在阅读错误消息时,我认为您必须解决以位存储字节的问题。 问题是一个字节是由多个位组成的,因此不能仅通过一个位来表示一个字节

将编码数据存储到ByteMatrix中,然后阅读以下文章:

根据javadoc和源代码,
QRCodeWriter.encode
方法返回一个
位矩阵,而不是
字节矩阵。因此,编译错误不应该发生

除非

。。。您正在使用与那些Javadoc不兼容的
com.google.zxing
库的某些版本1。检查zxing JAR文件的来源

尽管进行了搜索,我仍然无法找到具有这种不兼容的版本。然而:

  • 我注意到GitHub上的官方库已经被分叉了很多次,其中任何一个都可能是不兼容的根源

  • 我发现这显然是一个叉子,而且显然已经调整了
    encode
    。然而,这样做的人至少有很好的意识来更改包名



  • 我不知道这是否相关,但在这个API的C#版本中,
    QRCodeWriter.encode
    方法确实返回了一个
    ByteMatrix
    ;看看证据。也许你偶然发现有人错误地试图“修复”Java API以匹配C#API。

    我也遇到了同样的问题,我通过下载兼容的zxing-javase.jar和zxing来解决它

    最新版本兼容,并使用ByteMatrix而不是BitMatrix。从原始网站www.java2s.com下载