< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Menu.cpp

Print this page

        

@@ -237,10 +237,11 @@
     if (env->EnsureLocalCapacity(2) < 0) {
         return NULL;
     }
     jobject menuItem = env->CallObjectMethod(target, AwtMenu::getItemMID,
                                              index);
+    if (!menuItem) return NULL; // menu item was removed concurrently
     DASSERT(!safe_ExceptionOccurred(env));
 
     jobject wMenuItemPeer = GetPeerForTarget(env, menuItem);
 
     PDATA pData;

@@ -262,13 +263,13 @@
     if (env->EnsureLocalCapacity(1) < 0) {
         return;
     }
     /* target is a java.awt.Menu */
     jobject target = GetTarget(env);
-
+    if(!target || env->ExceptionCheck()) return;
     int nCount = CountItem(target);
-    for (int i = 0; i < nCount; i++) {
+    for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) {
         AwtMenuItem* awtMenuItem = GetItem(target, i);
         if (awtMenuItem != NULL) {
             SendDrawItem(awtMenuItem, drawInfo);
         }
     }

@@ -292,12 +293,13 @@
     if (env->EnsureLocalCapacity(1) < 0) {
         return;
     }
    /* target is a java.awt.Menu */
     jobject target = GetTarget(env);
+        if(!target || env->ExceptionCheck()) return;
     int nCount = CountItem(target);
-    for (int i = 0; i < nCount; i++) {
+    for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) {
         AwtMenuItem* awtMenuItem = GetItem(target, i);
         if (awtMenuItem != NULL) {
             SendMeasureItem(awtMenuItem, hDC, measureInfo);
         }
     }
< prev index next >