我正在尝试使用Epson TM-T70 Pos打印机。打印可以工作,但如果打印机脱机,我会尝试在循环中重新连接
以下情况发生在打印机控制对象的构造函数中,直到我遇到异常:
private POSPrinterControl19 epsonPrinterControl19;
epsonPrinterControl19 = (POSPrinterControl19) new POSPrinter();
epsonPrinterControl19.open(printerName);
epsonPrinterControl19.claim(0);
在声明时,抛出一个JPos异常,构造函数不进行构造。在Object上,finalize方法被称为:
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()引起的;它创建了这个线程
就我个人而言,我现在有另一个问题。。。我需要思考这个问题是否仍然相关。
如果有人知道如何摆脱线程(而不是阻止它们),请回答:)。
对于实际的问题:事实证明,通过调用新的POSPrinter(),一个线程正在创建,并且无论POSPrinter对象是否被引用,它都保持活动状态(尽管正在等待)。
解决方案(目前)似乎是确保构造函数只被调用一次,并对该对象执行所有重新连接、断开连接等操作
(无论如何,对我来说,这似乎是一个更干净的编程。)