好吧,我正在开发一个使用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并等待它被卸载。
有什么想法吗?
提前致谢。
答案 0 :(得分:0)
解决了从rxtx迁移到jSSC的问题:http://code.google.com/p/java-simple-serial-connector/
现在一切顺利!通过系统自动检测功能将dll集成到.jar中,适用于Windows,Linux,mac和solaris。
节省了我很多工作!
仍然没有明确的原因导致这些崩溃。