RFR: JDK-8276809: java/awt/font/JNICheck/FreeTypeScalerJNICheck.java shows JNI warning on Windows

Sergey Bylokhov serb at openjdk.java.net
Tue Nov 9 19:25:43 UTC 2021


On Tue, 9 Nov 2021 07:57:55 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:

> The new test java/awt/font/JNICheck/FreeTypeScalerJNICheck.java introduced with https://bugs.openjdk.java.net/browse/JDK-8269223 adds -Xcheck:jni to an awt related test, and shows on Windows server 2019 the following JNI warning , so the test  JNICheck/FreeTypeScalerJNICheck.java fails on this Windows version.
> 
> :stdErr:
> Thu Oct 28 01:27:10 CEST 2021
> stdout: [WARNING in native method: JNI call made without checking exceptions when required to from CallStaticVoidMethodV
>                at sun.awt.Win32GraphicsEnvironment.initDisplay(java.desktop at 18.0.0.1-internal/Native Method)
>                at sun.awt.Win32GraphicsEnvironment.initDisplayWrapper(java.desktop at 18.0.0.1-internal/Win32GraphicsEnvironment.java:95)
>                at sun.awt.Win32GraphicsEnvironment.<clinit>(java.desktop at 18.0.0.1-internal/Win32GraphicsEnvironment.java:63)
>                at sun.awt.PlatformGraphicsInfo.createGE(java.desktop at 18.0.0.1-internal/PlatformGraphicsInfo.java:34)
>                at java.awt.GraphicsEnvironment$LocalGE.createGE(java.desktop at 18.0.0.1-internal/GraphicsEnvironment.java:93)
>                at java.awt.GraphicsEnvironment$LocalGE.<clinit>(java.desktop at 18.0.0.1-internal/GraphicsEnvironment.java:84)
>                at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(java.desktop at 18.0.0.1-internal/GraphicsEnvironment.java:106)
>                at FreeTypeScalerJNICheck.runTest(FreeTypeScalerJNICheck.java:53)
>                at FreeTypeScalerJNICheck.main(FreeTypeScalerJNICheck.java:44)
> 
> We can get rid of the warning by adjusting a JNU_CallStaticMethodByName call in awt_Win32GraphicsEnv.cpp .

src/java.desktop/windows/native/libawt/windows/awt_Win32GraphicsEnv.cpp line 129:

> 127: 
> 128:     JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
> 129:     JNU_CallStaticMethodByName(env, &ignoreException,

As far as understand from the previous fix the "ignoreException" parameter does not suppress the currently raised exception, it just suppresses the warning in the XCheck:jni. So it will be good to propagate an exception to the user if this code is executed on the "java" thread, and log it by the trace macro if it is executed on a toolkit thread.

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

PR: https://git.openjdk.java.net/jdk/pull/6306



More information about the client-libs-dev mailing list