0

さて、私はrxtxSerial.dllを使用するプロジェクトに取り組んでいます(ちなみに非常にバグがあります)。

とにかく、GUIをよりユーザーフレンドリーにするために変更を加えました。最初はプログラムがメインウィンドウに表示され、ユーザーが勤務先の会社によって設計された特定のデバイスを監視できる他のフレームを開くことができます。したがって、ユーザーがホールプログラムと、開いているウィンドウを閉じたいと思ったときに、開いているウィンドウを自分で閉じてからプログラムを閉じるように求めるダイアログが表示されたので、それは本当に醜いので、私は考えました。それが私が作ったものです:

シリアル通信を使用するが開かれたときJDialogに、ユーザーが終了前よりもプログラムを閉じるように促した場合に備えて、参照を保存します。プログラムは次のコードを実行して、それぞれのリスナーがシリアルからの読み取りを停止するように呼び出されるようにします。ポート:

    for (Window w : openedWindows)
    {
        w.getToolkit().getSystemEventQueue().postEvent(
            new WindowEvent(w, WindowEvent.WINDOW_CLOSING));
    }

ユーザーがダイアログを閉じてもプログラムはクラッシュしないためWindowListener、通信のシャットダウンを担当するsに問題はありません。また、オンラインウィンドウが開いているときに閉じるプロンプトが表示されるとクラッシュすることがあります(シリアル通信の側面)。 、実際には、クラッシュ自体はユーザーには表示されず(プログラムのフォルダー、hs_err_pid.logファイルを調べた場合)、オンラインウィンドウでのクローズの約20%が発生します。hs_errのクラッシュは次のようなsiginfo: ExceptionCode=0xc0000005, writing address 0x17adfa88ものです。つまり、dllが既に閉じられた後にjavaのメモリに書き込もうとして、jvmがクラッシュするということです(間違っている場合は修正してください)。

私が欲しいのは、それらのエラーログファイルを生成しない方法です。問題を修正するか、可能であれば答えがそうではない場合は、それらのファイルを非表示にする方法を作成できます。

私が考えた修正の1つは、jvm自体をシャットダウンする前にdllを強制的にアンロードするか、dllを「要求」してアンロードし、アンロードされるまで待つことです。

何か案は?

前もって感謝します。

4

1 に答える 1

0

rxtx から jSSC への移行に関する問題を解決しました: http://code.google.com/p/java-simple-serial-connector/

今、すべてがスムーズに機能しています!システムの自動検出により、Windows、Linux、Mac、および Solaris 用の .jar に統合された dll。

私の多くの仕事を救った!

これらのクラッシュの明確な理由はまだありません。

于 2012-10-05T17:00:51.753 に答える