2016-06-25 6 views
0

私はrxtxを使ってシリアルポートに接続しています。すべてうまく動作しますが、解決できない問題があります。COMポートからプラグを抜いたときのJavaエラー

一度接続して読むと、ユーザーがデバイスを取り外す可能性があります(はい...ユーザー...)。この問題が発生した場合、私は次のエラーを取得する:

enter image description here

私は例外を取得しない、それだけでJava SEの(のjava.exeを)殺します。例外が発生した場合は、それに応じて動作しますが、このシナリオでは、アプリが動作を停止して終了します。

私はシリアルポートからの読み取りにInputStreamを使用します。 InputStream input = serialPort.getInputStream();

私は問題は、ストリームが開いているとデバイスが閉じているときに検出されないことだと思います。これは私がこの行で読むと起こります。
byte singleData =(byte)input.read();

以前の状態をテストするのに役立つ方法が見つかりませんでした。 私が読んでいない(またはInputStreamで作業する)場合でも、数秒後にエラーが発生します(誰かが入力や何かを閉じようとしていると思います)。

このイベントはどのようにして取得できますか(デバイスの電源が入っていません)?ポートと入力ストリームをどのように閉じるべきですか?

ありがとうございます。

+1

外部情報へのリンクを投稿しないでください。リンクが悪くなる。あなたの質問は自己完結型でなければならないので、将来的にその価値を保持しています。表示されているエラーは、JNI経由でJavaライブラリの基礎となるCコードにある可能性があります。これはおそらくRXTXのバグですので、助けを得る最良の場所は[RXTX Github Site](https://github.com/rxtx/rxtx)でしょう。 –

+0

ジム、あなたの返事をありがとう。 Stackoverflowは、私にこのオプションを与えた画像を投稿させませんでした。あなたのリンクを検索します。とにかく誰かが私を助けてくれることを願って、私はこの質問を残します。 – Damian

答えて

-1

私はrxtxではなくjsscライブラリを使用します。 try ... catchブロックを使用すると、クラッシュを避けることができます。

+0

試してみてください。 – EJP

+0

try/catchブロックを使用すると、シリアルポートイベントタスクを実行して、ポートからデータを読み込んだり、ポートにデータを書き込んだりすることができます。 tryブロックには、データを読み書きするためのコードがあります。また、catchブロックは、プログラムがクラッシュしないように、データの読み取りや書き込みの中断などの例外を処理します。さらに、何らかの理由で切断されているかどうかを調べるために、シリアルポートが接続されているかどうかを監視するtry/catchとともにスレッドを使用することで、プログラムをより効率的にすることができます。そして、プログラムがクラッシュすることはありません。 (私が連絡を取っていないので、遅れて返信していただきましたことをお詫び申し上げます) –

関連する問題