如何处理对ocassionaly抛出EXCEPTION_ACCESS_VIOLATION的dll的java调用?

时间:2011-12-21 15:09:06

标签: java java-native-interface

我编写了一个Java应用程序,它通过JNI调用用C ++编写的线性编程求解器。在多次成功调用后,我收到EXCEPTION_ACCESS_VIOLATION错误,应用程序终止。 如何解除错误并使Java应用程序保持运行?

2 个答案:

答案 0 :(得分:1)

首先,如果一个DLL崩溃,那么JVM将终止。

这是首先使用JNI的缺点之一。所以它通常不像吞咽 dll中的一些异常那么简单。

在您的情况下,错误提示单位化内存。您应该在代码中查看超出范围的索引。

您应该发布您的代码,以获得更多帮助

答案 1 :(得分:0)

如果本机代码中发生访问冲突,则无法保持JVM运行。

你可以做几件事。

  • 最好 - 在没有JNI的情况下仔细调试你的lib,使用小型独立C ++客户端,找到这种违规的原因,并添加过多的检查(不正确的指针使用,不正确的内存清理等)
  • 在一个单独的JVM进程中运行你的DLL,它完全负责提供这个解算器功能,使用套接字,tcp-ip,soap,rest与第二个JVM进行通信 - 无论你喜欢什么。然后,使用像Java Service Wrapper这样的程序来运行第二个JVM,并按照重新启动JVM的方式对其进行配置(如果崩溃)。