Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 退出前卸载dll rxtx以避免jvm崩溃或隐藏hs_err_pid.log文件_Java_Dll_Native_Rxtx_Jvm Crash - Fatal编程技术网

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

Java 退出前卸载dll rxtx以避免jvm崩溃或隐藏hs_err_pid.log文件,java,dll,native,rxtx,jvm-crash,Java,Dll,Native,Rxtx,Jvm Crash,嗯,我在一个使用rxtxSerial.dll的项目上(顺便说一句,这个问题非常严重) 无论如何,我对GUI做了一个修改,使其更加友好,最初程序会显示主窗口,并且可以打开一些其他框架,用户可以在其中监视我工作的公司设计的某些设备。因此,当用户想要关闭hole程序和任何打开的窗口时,会出现一个对话框,要求用户自己关闭打开的窗口,然后关闭程序,这真的很难看,所以我想:让我们做得更好;这就是我所做的: 当使用串行通信的JDialogs被打开时,如果用户提示关闭程序,而不是退出前,我只保存一个引用供将来使

嗯,我在一个使用rxtxSerial.dll的项目上(顺便说一句,这个问题非常严重)

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

当使用串行通信的
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=0xc000005,写入地址0x17adfa88
,因此我认为发生的情况是dll试图在java的内存已经关闭后写入,因此jvm崩溃(如果我错了,请纠正我)

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

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

有什么想法吗


提前感谢。

解决了我从rxtx迁移到jSSC的问题:

现在一切都很顺利!将DLL集成到.jar中,用于Windows、linux、mac和solaris,并具有系统自动检测功能

帮我省了很多工作


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

请检查此项,谢谢@KonstantinV.Salikhov,但我已经看了一下,无法提取任何有用的内容。如果您有一个有缺陷的DLL或共享库,则可能值得在单独的JVM中运行它。通过这种方式,带有DLL的进程可以根据需要重新启动,对主程序的影响最小。@KonstantinV.Salikhov实际上,现在我再次寻找它,我以前没有注意到链接,我正在阅读这些链接,也许我从中得到了一些信息。但问题是,即使我能让GC收集库,我怎么知道它是否已经卸载?@PeterLawrey,这不是主要问题,我可以让它在正常程序执行时正常工作,问题只是程序关闭时有时生成的日志文件。程序操作本身没有问题。此库是否有可用的示例代码或文档?