那麼,我在使用rxtxSerial.dll(非常錯誤的方式)的項目。退出前卸載dll rxtx以避免jvm崩潰或隱藏hs_err_pid.log文件
無論如何,我對GUI進行了修改,使其更加用戶友好,最初程序顯示主窗口,並且可以打開一些其他框架,用戶可以監視由我工作的公司設計的某些設備對於。因此,當用戶想要關閉洞程序和任何開放的窗口時,會出現一個對話框,要求用戶自己關閉操作窗口,然後關閉程序,這真的很難看,所以我想:讓我們做得更好;這就是我所做的:
當JDialog
s使用串行通信打開我只是保存一個引用它供將來使用,如果用戶提示關閉程序比退出前,該程序執行以下代碼,以確保相應的監聽器被稱爲像終止閱讀從串口:
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崩潰(糾正我,如果我錯了)。
我想要的是一種不生成這些錯誤日誌文件的方法,它可以解決問題或只是一種方法來隱藏這些文件,如果可能的話,我的答案不是。
我認爲可能的修復之一是強制卸載dll,然後關閉jvm本身或「請求」卸載dll並等待其卸載。
任何想法?
在此先感謝。
檢查此http://stackoverflow.com/questions/4307154/unloading-dll-in-java –
謝謝@ KonstantinV.Salikhov,但我已經看了一下,無法提取任何有用的東西。 – HericDenis
如果您有錯誤的DLL或共享庫,可能值得在單獨的JVM中運行它。這樣,可以根據需要重新啓動DLL的過程,而對主程序的影響最小。 –