一尘不染

当我从本地Java方法抛出C ++异常时会发生什么?

linux

假设我将Sun的JVM嵌入C ++应用程序中。通过JNI,我调用了Java方法(我自己的),该方法又调用了我在共享库中实现的本机方法。

如果此本机方法抛出C ++异常,会发生什么?

编辑:编译器是gcc 3.4.x,jvm是sun的1.6.20。


阅读 264

收藏
2020-06-03

共1个答案

一尘不染

在JNI文献中,“ 异常 ”一词似乎专门用于指代Java异常。本机代码中发生的意外事件称为 编程错误
。JNI明确不需要JVM检查编程错误。如果发生编程错误,则行为不确定。不同的JVM的行为可能有所不同。

将所有编程错误转换为返回代码或Java异常是本机代码的责任。Java异常不会立即从本机代码中抛出。它们可以处于 待处理状态
,只有在本机代码返回到Java调用程序后才抛出。本机代码可以使用来检查未决的异常,ExceptionOccurred并使用来清除它们ExceptionClear

2020-06-03