在退出之前卸载dll rxtx以避免jvm崩溃或隐藏hs_err_pid.log文件

时间:2012-10-02 11:53:33

标签: java dll native rxtx jvm-crash

好吧,我正在开发一个使用rxtxSerial.dll的项目(顺便提一下非常错误)。

无论如何,我在GUI上进行了修改以使其更加用户友好,最初程序显示主窗口,并且可以打开一些其他框架,用户可以监视我工作的公司设计的某些设备。 。因此,当用户想要关闭孔程序和任何打开它的窗口时,它会显示一个对话框,要求用户自己关闭oppened窗口,然后关闭程序,这真的很难看,所以我想:让它变得更好;这就是我所做的:

当打开使用串行通信的JDialog时,我只保存一个引用以供将来使用,如果用户提示关闭程序而不是退出之前,程序执行以下代码以确保相应的监听器被称为从串口停止读取:

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

当用户关闭对话框时,程序不会崩溃,因此WindowListener上没有任何问题负责将通信断开,有时在联机窗口提示关闭时崩溃虽然是oppened(在串行通信方面),实际上崩溃本身对于用户是不可见的(就像他查看程序的文件夹中的hs_err_pid.log文件)并且在线窗口发生了大约20%的关闭。 hs_err中的崩溃类似于:siginfo: ExceptionCode=0xc0000005, writing address 0x17adfa88所以我认为它发生的是dll在它已经关闭之后尝试写入java的内存,因此jvm崩溃(如果我错了就纠正我)。

我想要的是一种不生成这些错误日志文件的方法,它可以修复问题或只是一种隐藏这些文件的方法,如果可能的话我认为答案不是。

我认为可能的修复方法之一是在关闭jvm本身之前强行卸载dll,或者“请求”卸载dll并等待它被卸载。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

解决了从rxtx迁移到jSSC的问题:http://code.google.com/p/java-simple-serial-connector/

现在一切顺利!通过系统自动检测功能将dll集成到.jar中,适用于Windows,Linux,mac和solaris。

节省了我很多工作!

仍然没有明确的原因导致这些崩溃。