How to Read Multiple Barcode and QR Code with Dynamsoft Java Barcode SDK

There are many open-source and commercial barcode SDKs, but only a few of them can recognize multiple barcode and QR code simultaneously. When you search Google for barcode SDK or Java barcode SDK, Dynamsoft Barcode Reader SDK always appears in the top 5 of the search results. This article guides you through the process of creating a Java barcode and QR code scanning application for Windows (x86 and x64), Linux (AMD64 and ARM64), and macOS.

SDK Version


Supported Platforms

  • Windows (x86 and x64)
  • Linux (x64 and ARM64): PC, Raspberry Pi, Jetson Nano
  • macOS (x64)

Steps to Configure Java Barcode SDK with Maven

  1. Install Maven.
  2. Create a new Maven project via the command line:

     mvn archetype:generate -DgroupId=com.dynamsoft -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
  3. Open the pom.xml file in the new project folder to add the dependency:

  4. Build the project:

     mvn package
  5. Run the Java application:

     java -cp target/test-1.0-SNAPSHOT.jar com.dynamsoft.App

Maven Configuration in Visual Studio Code

If you are using Visual Studio Code, the steps can be simplified as follows:

  1. Install the Maven extension:

    Maven extension for visual studio code

  2. Select archetype-quickstart-jdk8 to create a new Maven project.

    vscode Maven project

  3. Add the dependency to pom.xml.
  4. Press F5 to run the app instantly.

    run Java in vscode

To run the app with an input image in Visual Studio Code, add args to the .vscode/launch.json file:

    "version": "0.2.0",
    "configurations": [
            "type": "java",
            "name": "Debug (Launch) - Current File",
            "request": "launch",
            "mainClass": "${file}",
            "args": "images/AllSupportedBarcodeTypes.png"
            "type": "java",
            "name": "Debug (Launch)-App<test>",
            "request": "launch",
            "mainClass": "com.dynamsoft.App",
            "projectName": "test",
            "args": "images/AllSupportedBarcodeTypes.png"

Implementing Multiple Barcode and QR Code Scanning in Java

First, we import the Java barcode SDK:

import com.dynamsoft.dbr.*;

Before instantiating the barcode reader object, you must get a valid license key and set it globally:

BarcodeReader br = null;
try {
    br = new BarcodeReader();
} catch (Exception e) {

There are three optional decoding functions available for developers. We can call one of them to scan multiple barcode and QR code:

  • decodeBufferedImage

      BufferedImage img = null;
      try {
          img = File(pszImageFile));
          TextResult[] results = br.decodeBufferedImage(img, "");
      } catch (IOException e) {
  • decodeFile

      TextResult[] results = br.decodeFile(pszImageFile, "");
  • decodeFileInMemory

      TextResult[] results = br.decodeFileInMemory(Files.readAllBytes(new File(pszImageFile).toPath()), "");

Finally, we use the following code to extract the information from the recognition results:

if (results != null && results.length > 0) {
    String pszTemp = null;
    iIndex = 0;
    for (TextResult result : results) {
        pszTemp = String.format("  Barcode %d:", iIndex);
        pszTemp = String.format("    Page: %d", result.localizationResult.pageNumber + 1);
        if (result.barcodeFormat != 0) {
            pszTemp = "    Type: " + result.barcodeFormatString;
        } else {
            pszTemp = "    Type: " + result.barcodeFormatString_2;
        pszTemp = "    Value: " + result.barcodeText;

        pszTemp = String.format("    Region points: {(%d,%d),(%d,%d),(%d,%d),(%d,%d)}",
                result.localizationResult.resultPoints[0].x, result.localizationResult.resultPoints[0].y,
                result.localizationResult.resultPoints[1].x, result.localizationResult.resultPoints[1].y,
                result.localizationResult.resultPoints[2].x, result.localizationResult.resultPoints[2].y,
                result.localizationResult.resultPoints[3].x, result.localizationResult.resultPoints[3].y);


If you want to scan amounts of barcode and QR code images concurrently, you can use a thread pool to improve the performance:

ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
for (int i = 1; i <= 1000; i++) 
    executor.execute(new Runnable(){
        public void run() {
            App test = new App();
            try {
            } catch (InterruptedException e) {

Note: due to the limitation of JVM heap memory, you may suffer from the out-of-memory error when reading image files to BufferedImage in Java. Therefore, using BufferedImage in multiple threads is not recommended.

How to Build and Run Java Barcode and QR Code Reader

To easily run the Java program with dependencies, we add a maven assembly plugin to pom.xml:


The plugin will build everything into a jar file:

mvn clean install assembly:assembly

Finally, we run the Java application by using the following command:

java -cp target/test-1.0-SNAPSHOT-jar-with-dependencies.jar com.dynamsoft.App images/AllSupportedBarcodeTypes.png

read multiple barcodes by using Java barcode reader

Java barcode and QR code reader

The Java program can work on Windows, Linux, macOS, Raspberry Pi and Jetson Nano.

How to Deploy and Run Java Application Using Docker

  1. Create a Dockerfile:

     FROM openjdk:11-stretch
     COPY images/AllSupportedBarcodeTypes.png AllSupportedBarcodeTypes.png
     COPY target/test-1.0-SNAPSHOT-jar-with-dependencies.jar test-1.0-SNAPSHOT-jar-with-dependencies.jar
     CMD java -cp test-1.0-SNAPSHOT-jar-with-dependencies.jar com.dynamsoft.App AllSupportedBarcodeTypes.png
  2. Build the Docker image and run the Java program in a Docker Linux container:

     docker rmi dynamsoft/barcode-reader -f
     docker build -t dynamsoft/barcode-reader -f Dockerfile .
     docker run -it dynamsoft/barcode-reader

    Java barcode reader in Docker Linux container

Source Code