Я создаю настольное приложение 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)
"