【问题标题】:Unloading dll rxtx before exit to avoid jvm crashes or hide hs_err_pid.log files退出前卸载 dll rxtx 以避免 jvm 崩溃或隐藏 hs_err_pid.log 文件
【发布时间】:2012-10-02 11:53:33
【问题描述】:

嗯,我在一个使用 rxtxSerial.dll 的项目中(顺便说一句,问题很大)。

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

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

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

当用户关闭对话框时程序不会崩溃,因此负责关闭通信的WindowListeners 上没有问题,有时在打开在线窗口时提示关闭时会崩溃(在串行通信方面),实际上用户看不到崩溃本身(只要他查看程序的文件夹 hs_err_pid.log 文件)并且发生大约 20% 的在线窗口关闭。 hs_err 中的崩溃就像:siginfo: ExceptionCode=0xc0000005, writing address 0x17adfa88 所以我想它发生的是 dll 在它已经关闭后试图写入 java 的内存,所以 jvm 崩溃(如果我错了,请纠正我)。

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

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

有什么想法吗?

提前致谢。

【问题讨论】:

  • 谢谢@KonstantinV.Salikhov,但我已经看过了,无法提取任何有用的东西。
  • 如果您的 DLL 或共享库有问题,可能值得在单独的 JVM 中运行它。这样,可以根据需要重新启动带有 DLL 的进程,而对主程序的影响最小。
  • @KonstantinV.Salikhov 实际上,现在我再次寻找它,我之前没有注意到链接,我正在阅读那些也许我得到了一些东西。但问题是,即使我可以要求 GC 收集库,我怎么知道它是否已经被卸载?
  • @PeterLawrey,这不是主要问题,我可以在正常程序执行时让它工作得很好,问题只是有时在程序关闭时生成的日志文件。程序运行本身没有问题。

标签: java dll native rxtx jvm-crash


【解决方案1】:

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

现在一切正常!将 dll 集成到适用于 Windows、linux、mac 和 solaris 的 .jar 中,并具有系统自动检测功能。

为我节省了很多工作!

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

【讨论】:

  • 此库是否有任何示例代码或文档可用?
猜你喜欢
  • 2010-11-04
  • 2012-10-05
  • 1970-01-01
  • 2010-11-19
  • 2015-11-16
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多