mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-09 06:28:49 +00:00
8035626: [parfait] JNI exception pending in jdk/src/windows/native/sun/windows/awt_Toolkit.cpp, awt_Toolkit.h
Reviewed-by: anthony, art, serb
This commit is contained in:
parent
f80b2f863c
commit
3e98d762b9
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -172,35 +172,22 @@ void AwtToolkit::SetBusy(BOOL busy) {
|
||||
|
||||
if (awtAutoShutdownClass == NULL) {
|
||||
jclass awtAutoShutdownClassLocal = env->FindClass("sun/awt/AWTAutoShutdown");
|
||||
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
|
||||
env->ExceptionDescribe();
|
||||
env->ExceptionClear();
|
||||
}
|
||||
DASSERT(awtAutoShutdownClassLocal != NULL);
|
||||
if (awtAutoShutdownClassLocal == NULL) {
|
||||
return;
|
||||
}
|
||||
if (!awtAutoShutdownClassLocal) throw std::bad_alloc();
|
||||
|
||||
awtAutoShutdownClass = (jclass)env->NewGlobalRef(awtAutoShutdownClassLocal);
|
||||
env->DeleteLocalRef(awtAutoShutdownClassLocal);
|
||||
if (!awtAutoShutdownClass) throw std::bad_alloc();
|
||||
|
||||
notifyBusyMethodID = env->GetStaticMethodID(awtAutoShutdownClass,
|
||||
"notifyToolkitThreadBusy", "()V");
|
||||
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
|
||||
env->ExceptionDescribe();
|
||||
env->ExceptionClear();
|
||||
}
|
||||
DASSERT(notifyBusyMethodID != NULL);
|
||||
if (!notifyBusyMethodID) throw std::bad_alloc();
|
||||
|
||||
notifyFreeMethodID = env->GetStaticMethodID(awtAutoShutdownClass,
|
||||
"notifyToolkitThreadFree", "()V");
|
||||
if (!JNU_IsNull(env, safe_ExceptionOccurred(env))) {
|
||||
env->ExceptionDescribe();
|
||||
env->ExceptionClear();
|
||||
}
|
||||
DASSERT(notifyBusyMethodID != NULL);
|
||||
DASSERT(notifyFreeMethodID != NULL);
|
||||
if (notifyBusyMethodID == NULL || notifyFreeMethodID == NULL) {
|
||||
return;
|
||||
}
|
||||
if (!notifyFreeMethodID) throw std::bad_alloc();
|
||||
} /* awtAutoShutdownClass == NULL*/
|
||||
|
||||
if (busy) {
|
||||
@ -776,9 +763,11 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message,
|
||||
|
||||
jclass systemColorClass = env->FindClass("java/awt/SystemColor");
|
||||
DASSERT(systemColorClass);
|
||||
if (!systemColorClass) throw std::bad_alloc();
|
||||
|
||||
jmethodID mid = env->GetStaticMethodID(systemColorClass, "updateSystemColors", "()V");
|
||||
DASSERT(mid);
|
||||
if (!mid) throw std::bad_alloc();
|
||||
|
||||
env->CallStaticVoidMethod(systemColorClass, mid);
|
||||
|
||||
@ -1038,6 +1027,8 @@ LRESULT CALLBACK AwtToolkit::WndProc(HWND hWnd, UINT message,
|
||||
|
||||
// Notify Java side - call WToolkit.displayChanged()
|
||||
jclass clazz = env->FindClass("sun/awt/windows/WToolkit");
|
||||
DASSERT(clazz != NULL);
|
||||
if (!clazz) throw std::bad_alloc();
|
||||
env->CallStaticVoidMethod(clazz, AwtToolkit::displayChangeMID);
|
||||
|
||||
GetInstance().m_displayChanged = TRUE;
|
||||
@ -2050,15 +2041,20 @@ Java_java_awt_Toolkit_initIDs(JNIEnv *env, jclass cls) {
|
||||
|
||||
AwtToolkit::getDefaultToolkitMID =
|
||||
env->GetStaticMethodID(cls,"getDefaultToolkit","()Ljava/awt/Toolkit;");
|
||||
AwtToolkit::getFontMetricsMID =
|
||||
env->GetMethodID(cls, "getFontMetrics",
|
||||
"(Ljava/awt/Font;)Ljava/awt/FontMetrics;");
|
||||
AwtToolkit::insetsMID =
|
||||
env->GetMethodID(env->FindClass("java/awt/Insets"), "<init>", "(IIII)V");
|
||||
|
||||
DASSERT(AwtToolkit::getDefaultToolkitMID != NULL);
|
||||
CHECK_NULL(AwtToolkit::getDefaultToolkitMID);
|
||||
|
||||
AwtToolkit::getFontMetricsMID =
|
||||
env->GetMethodID(cls, "getFontMetrics", "(Ljava/awt/Font;)Ljava/awt/FontMetrics;");
|
||||
DASSERT(AwtToolkit::getFontMetricsMID != NULL);
|
||||
DASSERT(AwtToolkit::insetsMID != NULL);
|
||||
CHECK_NULL(AwtToolkit::getFontMetricsMID);
|
||||
|
||||
jclass insetsClass = env->FindClass("java/awt/Insets");
|
||||
DASSERT(insetsClass != NULL);
|
||||
CHECK_NULL(insetsClass);
|
||||
AwtToolkit::insetsMID = env->GetMethodID(insetsClass, "<init>", "(IIII)V");
|
||||
DASSERT(AwtToolkit::insetsMID != NULL);
|
||||
CHECK_NULL(AwtToolkit::insetsMID);
|
||||
|
||||
CATCH_BAD_ALLOC;
|
||||
}
|
||||
@ -2085,10 +2081,12 @@ Java_sun_awt_windows_WToolkit_initIDs(JNIEnv *env, jclass cls)
|
||||
AwtToolkit::windowsSettingChangeMID =
|
||||
env->GetMethodID(cls, "windowsSettingChange", "()V");
|
||||
DASSERT(AwtToolkit::windowsSettingChangeMID != 0);
|
||||
CHECK_NULL(AwtToolkit::windowsSettingChangeMID);
|
||||
|
||||
AwtToolkit::displayChangeMID =
|
||||
env->GetStaticMethodID(cls, "displayChanged", "()V");
|
||||
DASSERT(AwtToolkit::displayChangeMID != 0);
|
||||
CHECK_NULL(AwtToolkit::displayChangeMID);
|
||||
|
||||
// Set various global IDs needed by JAWT code. Note: these
|
||||
// variables cannot be set by JAWT code directly due to
|
||||
@ -2099,24 +2097,37 @@ Java_sun_awt_windows_WToolkit_initIDs(JNIEnv *env, jclass cls)
|
||||
// negligible penalty.
|
||||
jclass sDataClassLocal = env->FindClass("sun/java2d/SurfaceData");
|
||||
DASSERT(sDataClassLocal != 0);
|
||||
CHECK_NULL(sDataClassLocal);
|
||||
|
||||
jclass vImgClassLocal = env->FindClass("sun/awt/image/SunVolatileImage");
|
||||
DASSERT(vImgClassLocal != 0);
|
||||
CHECK_NULL(vImgClassLocal);
|
||||
|
||||
jclass vSMgrClassLocal =
|
||||
env->FindClass("sun/awt/image/VolatileSurfaceManager");
|
||||
DASSERT(vSMgrClassLocal != 0);
|
||||
CHECK_NULL(vSMgrClassLocal);
|
||||
|
||||
jclass componentClassLocal = env->FindClass("java/awt/Component");
|
||||
DASSERT(componentClassLocal != 0);
|
||||
CHECK_NULL(componentClassLocal);
|
||||
|
||||
jawtSMgrID = env->GetFieldID(vImgClassLocal, "volSurfaceManager",
|
||||
"Lsun/awt/image/VolatileSurfaceManager;");
|
||||
DASSERT(jawtSMgrID != 0);
|
||||
CHECK_NULL(jawtSMgrID);
|
||||
|
||||
jawtSDataID = env->GetFieldID(vSMgrClassLocal, "sdCurrent",
|
||||
"Lsun/java2d/SurfaceData;");
|
||||
DASSERT(jawtSDataID != 0);
|
||||
CHECK_NULL(jawtSDataID);
|
||||
|
||||
jawtPDataID = env->GetFieldID(sDataClassLocal, "pData", "J");
|
||||
DASSERT(jawtPDataID != 0);
|
||||
|
||||
CHECK_NULL(jawtPDataID);
|
||||
// Save these classes in global references for later use
|
||||
jawtVImgClass = (jclass)env->NewGlobalRef(vImgClassLocal);
|
||||
CHECK_NULL(jawtVImgClass);
|
||||
jawtComponentClass = (jclass)env->NewGlobalRef(componentClassLocal);
|
||||
|
||||
CATCH_BAD_ALLOC;
|
||||
@ -2377,7 +2388,11 @@ Java_sun_awt_windows_WToolkit_getScreenInsets(JNIEnv *env,
|
||||
TRY;
|
||||
|
||||
if (AwtToolkit::GetScreenInsets(screen, &rect)) {
|
||||
insets = env->NewObject(env->FindClass("java/awt/Insets"),
|
||||
jclass insetsClass = env->FindClass("java/awt/Insets");
|
||||
DASSERT(insetsClass != NULL);
|
||||
CHECK_NULL_RETURN(insetsClass, NULL);
|
||||
|
||||
insets = env->NewObject(insetsClass,
|
||||
AwtToolkit::insetsMID,
|
||||
rect.top,
|
||||
rect.left,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -80,7 +80,7 @@ class JNILocalFrame {
|
||||
int result = m_env->PushLocalFrame(size);
|
||||
if (result < 0) {
|
||||
DASSERT(FALSE);
|
||||
JNU_ThrowOutOfMemoryError(m_env, "Can't allocate localRefs");
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
}
|
||||
INLINE ~JNILocalFrame() { m_env->PopLocalFrame(NULL); }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user