假设我将Sun的JVM嵌入C ++应用程序中。通过JNI,我调用了Java方法(我自己的),该方法又调用了我在共享库中实现的本机方法。
如果此本机方法抛出C ++异常,会发生什么?
编辑:编译器是gcc 3.4.x,jvm是sun的1.6.20。
在JNI文献中,“ 异常 ”一词似乎专门用于指代Java异常。本机代码中发生的意外事件称为 编程错误 。JNI明确不需要JVM检查编程错误。如果发生编程错误,则行为不确定。不同的JVM的行为可能有所不同。
将所有编程错误转换为返回代码或Java异常是本机代码的责任。Java异常不会立即从本机代码中抛出。它们可以处于 待处理状态 ,只有在本机代码返回到Java调用程序后才抛出。本机代码可以使用来检查未决的异常,ExceptionOccurred并使用来清除它们ExceptionClear。
ExceptionOccurred
ExceptionClear