我正在尝试使用爱普生TM-T70 Pos打印机。打印工作正常,但如果打印机脱机,我会尝试重新连接。
在我遇到一个异常之前,以下情况会在打印机控制对象的构造函数中发生:
private POSPrinterControl19 epsonPrinterControl19;
epsonPrinterControl19 = (POSPrinterControl19) new POSPrinter();
epsonPrinterControl19.open(printerName);
epsonPrinterControl19.claim(0); 在声明中,JPos异常被抛出,构造函数不构造。在对象上,调用finalize-method:
super.finalize();
epsonPrinterControl19.removeStatusUpdateListener(this);
epsonPrinterControl19 = null; 不过,仍在运行的是一个线程:
"EPSON UPOS Service EventThread.@2472" prio=5 tid=0x14 nid=NA waiting
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:485)
at jp.co.epson.upos.ServiceEventQueue.peekEvent(Unknown Source:-1)
at jp.co.epson.upos.ServiceEventThread.run(Unknown Source:-1)我似乎无法摆脱这个线程。由于我重新尝试从主程序连接到打印机,因此不断创建新的线程。
问题是:我如何摆脱这些线程?
编辑:我尝试了更多...这个问题似乎是由创建这个线程的新POSPrinter();引起的。
就我个人而言,我现在有另一个问题...我需要考虑这个问题是否仍然相关。
发布于 2015-03-04 21:44:10
如果有人知道如何删除线程(而不是阻止它们),请回答:)。
对于实际问题:结果是,通过调用new POSPrinter(),创建了一个线程,并且无论PosPrinter对象是否被引用,它都保持活动(尽管正在等待)。
目前的解决方案似乎是确保构造函数只被调用一次,并在该对象上执行重新连接、断开连接等所有操作。
(无论如何,对我来说,这似乎是更干净的编程。)
https://stackoverflow.com/questions/28848890
复制相似问题