我有一臺Swing GUI應用程序在〜150臺計算機(每臺配置相同)的WinXP上運行。Java串行端口寫入將CPU使用率提高到100%
但是在其中一些應用程序(如5)上,當應用程序嘗試通過RXTX(pos打印機)與串行端口通信時,java cpu使用率上升到接近100%,因此阻塞了整個機器。
此串行端口上的寫入是在特定的線程中完成的。其中之一是這樣的:
... queries on the hsql database
... writing results in a byte array called "stream"
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM2");
serialPort = (SerialPort) portId.open("Sending", 2000);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
OutputStream out = serialPort.getOutputStream();
out.write(stream);
out.close();
serialPort.close();
我首先想到有一個與查詢問題寫之前,但我的應用程序做了很多其他線程的查詢,這兒有沒有這樣的問題。
在這些計算機上,打印時間是可變的(最多10分鐘,機器被阻塞)。在其他計算機上,打印在2秒內完成,而不會提高CPU使用率。
你有什麼想法可以解決這個問題嗎?
嘗試從命令行直接打印到打印機以排除系統問題。 – PeterMmm
你捕獲PortInUseException嗎?我可以從上面的代碼想象出,'out.write'塊,因爲打印機沒有「關注」? – Fildor
是的抱歉,我沒有粘貼我的所有代碼,但我抓到了PortInUse,UnsupportedComOperation和NoSuchPort,這些都沒有拋出。 – caRameL