< prev index next >

jdk/src/java.base/share/native/libjli/java.c

Print this page

        

@@ -374,10 +374,16 @@
             ret = (CEL_return_value); \
             LEAVE(); \
         } \
     } while (JNI_FALSE)
 
+#define CHECK_EXCEPTION_PRINT() \
+    do { \
+        if ((*env)->ExceptionOccurred(env)) { \
+            JLI_ReportExceptionDescription(env); \
+        } \
+    } while (JNI_FALSE)
 
 int JNICALL
 JavaMain(void * _args)
 {
     JavaMainArgs *args = (JavaMainArgs *)_args;

@@ -1527,10 +1533,11 @@
                         cls, "makePlatformString", "(Z[B)Ljava/lang/String;"));
             }
             str = (*env)->CallStaticObjectMethod(env, cls,
                     makePlatformStringMID, USE_STDERR, ary);
             (*env)->DeleteLocalRef(env, ary);
+            CHECK_EXCEPTION_PRINT();
             return str;
         }
     }
     return 0;
 }

@@ -1578,10 +1585,11 @@
                 "(ZILjava/lang/String;)Ljava/lang/Class;"));
 
     NULL_CHECK0(str = NewPlatformString(env, name));
     NULL_CHECK0(result = (*env)->CallStaticObjectMethod(env, cls, mid,
                                                         USE_STDERR, mode, str));
+    CHECK_EXCEPTION_PRINT();
 
     if (JLI_IsTraceLauncher()) {
         end   = CounterGet();
         printf("%ld micro seconds to load main class\n",
                (long)(jint)Counter2Micros(end-start));

@@ -1599,11 +1607,13 @@
     NULL_CHECK0(cls);
     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,
                 "getApplicationClass",
                 "()Ljava/lang/Class;"));
 
-    return (*env)->CallStaticObjectMethod(env, cls, mid);
+    cls = (*env)->CallStaticObjectMethod(env, cls, mid);
+    CHECK_EXCEPTION_PRINT();
+    return cls;
 }
 
 /*
  * For tools, convert command line args thus:
  *   javac -cp foo:foo/"*" -J-ms32m ...

@@ -1810,10 +1820,11 @@
                                                  "()V"
                                                  )
               );
 
     (*env)->CallStaticVoidMethod(env, ver, print);
+    CHECK_EXCEPTION_PRINT();
 }
 
 /*
  * Prints all the Java settings, see the java implementation for more details.
  */

@@ -1832,10 +1843,11 @@
                                  joptString,
                                  (jlong)initialHeapSize,
                                  (jlong)maxHeapSize,
                                  (jlong)threadStackSize,
                                  ServerClassMachine());
+    CHECK_EXCEPTION_PRINT();
 }
 
 /**
  * List modules supported by the runtime
  */

@@ -1850,10 +1862,11 @@
             "listModules", "(ZLjava/lang/String;)V"));
     NULL_CHECK(joptString = (*env)->NewStringUTF(env, optString));
     (*env)->CallStaticVoidMethod(env, cls, listModulesID,
                                  USE_STDERR,
                                  joptString);
+    CHECK_EXCEPTION_PRINT();
 }
 
 /*
  * Prints default usage or the Xusage message, see sun.launcher.LauncherHelper.java
  */

@@ -1867,10 +1880,11 @@
   NULL_CHECK(cls);
   if (doXUsage) {
     NULL_CHECK(printXUsageMessage = (*env)->GetStaticMethodID(env, cls,
                                         "printXUsageMessage", "(Z)V"));
     (*env)->CallStaticVoidMethod(env, cls, printXUsageMessage, USE_STDERR);
+    CHECK_EXCEPTION_PRINT();
   } else {
     NULL_CHECK(initHelp = (*env)->GetStaticMethodID(env, cls,
                                         "initHelpMessage", "(Ljava/lang/String;)V"));
 
     NULL_CHECK(vmSelect = (*env)->GetStaticMethodID(env, cls, "appendVmSelectMessage",

@@ -1931,10 +1945,11 @@
       CHECK_EXCEPTION_RETURN();
     }
 
     /* Complete the usage message and print to stderr*/
     (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR);
+    CHECK_EXCEPTION_RETURN();
   }
   return;
 }
 
 /*
< prev index next >