КАК ИСПОЛЬЗОВАТЬ escpos-2.2 jar и jSerialComm-2.5.0 jar для ПЕЧАТИ ЧЕКА НА ТЕРМОЧЕКОВОМ ПРИНТЕРЕ

Я создаю настольное приложение POS с Java, которое печатает квитанцию ​​​​о транзакции с использованием термопринтера. Я обнаружил, что для этого можно использовать escpos и JSerialComm Java API. Я скопировал пример кода с GitHub, чтобы проверить, будут ли работать API. Ниже приведен код, который предположительно должен работать, но возвращает NullPointerExceptionError.

Я не знаю, что я делаю неправильно. Итак, что я должен сделать, чтобы хотя бы распечатать «Hello World», чтобы увидеть, действительно ли мое приложение может дойти до принтера. Помощь!


package com;

import com.fazecast.jSerialComm.SerialPort;
import com.github.terrytsai.escpos.EscPosWriter;
import com.github.terrytsai.escpos.enums.CharacterCodeTable;
import com.github.terrytsai.escpos.enums.CutA;
import com.github.terrytsai.escpos.enums.Height;
import com.github.terrytsai.escpos.enums.Justification;
import com.github.terrytsai.escpos.enums.Pin;
import com.github.terrytsai.escpos.enums.PulseTime;
import com.github.terrytsai.escpos.enums.Width;
import com.github.terrytsai.escpos.serial.SerialFactory;
import com.github.terrytsai.escpos.serial.config.SerialConfig;
import java.io.OutputStream;

public class PrinterClass {

    private static PrinterClass printer = null;
    private static  OutputStream out;
    private static EscPosWriter escPos;

    private PrinterClass(){
        initSerial();
    }

    protected static void writeReceipt(){
        System.out.println("Receipt started...");
        escPos = new EscPosWriter(out)
        .initialize()
        .setCharacterCodeTable(CharacterCodeTable.PC437)
        .setJustification(Justification.CENTER)
        .setCharacterSize(Width.X3, Height.X3)
        .setEmphasize(true)
        .text("HELLO WORLD")
        .printAndFeedLines(5)
        .cut(CutA.PARTIAL)
        .sendRealTimeRequestPulse(Pin.TWO, PulseTime.FOUR);
        System.out.println("Receipt done!");
    }

    private static PrinterClass getInstance(){
        if(printer == null){
            printer = new PrinterClass();
        }
        return printer;
    }

    private void initSerial(){
        SerialPort port = SerialFactory.com(3, SerialConfig.CONFIG_9600_8N1());
        port.openPort();
        out = port.getOutputStream();
        port.closePort();
      }

    public static void main(String [] args){
        PrinterClass pc = PrinterClass.getInstance();
        pc.writeReceipt();
    }
}

"Я ожидал, что он напечатает квитанцию. Но я получаю сообщение об ошибке:"

"

Exception in thread "main" java.lang.NullPointerException
    at com.github.terrytsai.escpos.EscPosWriter.write(EscPosWriter.java:1345)
    at com.github.terrytsai.escpos.EscPosWriter.initialize(EscPosWriter.java:1213)
    at com.PrinterClass.writeReceipt(PrinterClass.java:30)
    at com.PrinterClass.main(PrinterClass.java:58)

"


person CliffTheCoder    schedule 10.08.2019    source источник
comment
Я считаю, что проблема в том, что функция инициализации открывает и закрывает порт.   -  person fragmint    schedule 05.02.2020


Ответы (1)


обычно на ПК есть серверные COM-порты, попробуйте выяснить, какой порт вашего принтера, это не обязательно 3. Обновите метод initSerial соответствующим образом.

person forrestg    schedule 10.08.2019
comment
Я попытался изменить номер последовательного порта с 1 на 5, но ошибка все еще сохраняется. Кстати, я использую интерфейс USB, а не обязательно последовательный порт. - person CliffTheCoder; 10.08.2019
comment
Как насчет вопроса сейчас? - person forrestg; 05.11.2019