RFR: 8323664: java/awt/font/JNICheck/FreeTypeScalerJNICheck.java still fails with JNI warning on some Windows configurations [v3]

Alexey Ivanov aivanov at openjdk.org
Tue Jan 30 13:47:42 UTC 2024


On Tue, 30 Jan 2024 13:15:14 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:

> Is there a guide which clearly states where `ExceptionCheck` is required?

I should've looked it up. [Java Native Interface Specification](https://docs.oracle.com/en/java/javase/21/docs/specs/jni/index.html), section on [handling Java Exception](https://docs.oracle.com/en/java/javase/21/docs/specs/jni/design.html#java-exceptions) says:

<blockquote cite="https://docs.oracle.com/en/java/javase/21/docs/specs/jni/design.html#exceptions-and-error-codes">Certain JNI functions use the Java exception mechanism to report error conditions. In most cases, JNI functions report error conditions by returning an error code and throwing a Java exception. The error code is usually a special return value (such as NULL) that is outside of the range of normal return values. Therefore, the programmer can:

* quickly check the return value of the last JNI call to determine if an error has occurred, and
* call a function, `ExceptionOccurred()`, to obtain the exception object that contains a more detailed description of the error condition.

There are two cases where the programmer needs to check for exceptions without being able to first check an error code:

* The JNI functions that invoke a Java method return the result of the Java method. The programmer must call `ExceptionOccurred()` to check for possible exceptions that occurred during the execution of the Java method.
* Some of the JNI array access functions do not return an error code, but may throw an `ArrayIndexOutOfBoundsException` or `ArrayStoreException`.

In all other cases, a non-error return value guarantees that no exceptions have been thrown.</blockquote>

Thus, `FindClass` returns non-null value if no error occurred; if the returned value is null, an error occurred, and `FindClass` raised an exception on the Java side.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17404#discussion_r1471241316


More information about the client-libs-dev mailing list