〜150台のコンピューター(それぞれ同じ構成)のWinXPでSwing GUIアプリケーションを実行しています。
しかし、そのうちのいくつか (5 など) では、アプリケーションが RXTX (pos プリンター) 経由でシリアル ポートと通信しようとすると、Java CPU 使用率がほぼ 100% まで上昇し、マシン全体がブロックされます。
このシリアル ポートへの書き込みは、特定のスレッドで行われます。それらの1つは次のようになります。
... 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 分)。他のコンピュータでは、CPU 使用率を上げずに 2 秒で印刷が完了します。
この問題がどこから来るのか、何か考えはありますか?