< prev index next >

src/java.base/share/classes/java/lang/System.java

Print this page

        

*** 41,50 **** --- 41,51 ---- import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Module; import java.net.URL; import java.security.AccessControlContext; + import java.security.ProtectionDomain; import java.util.Properties; import java.util.PropertyPermission; import java.util.Map; import java.security.AccessController; import java.security.PrivilegedAction;
*** 1843,1852 **** --- 1844,1886 ---- } return new PrintStream(new BufferedOutputStream(fos, 128), true); } /** + * Logs an exception/error at initialization time to stdout or stderr. + * + * @param printToStderr to print to stderr rather than stdout + * @param printStackTrace to print the stack trace + * @param msg the message to print before the exception, can be {@code null} + * @param e the exception or error + */ + private static void logInitException(boolean printToStderr, + boolean printStackTrace, + String msg, + Throwable e) { + if (VM.initLevel() < 1) { + throw new InternalError("system classes not initialized"); + } + PrintStream log = (printToStderr) ? err : out; + if (msg != null) { + log.println(msg); + } + if (printStackTrace) { + e.printStackTrace(log); + } else { + log.println(e); + for (Throwable suppressed : e.getSuppressed()) { + log.println("Suppressed: " + suppressed); + } + Throwable cause = e.getCause(); + if (cause != null) { + log.println("Caused by: " + cause); + } + } + } + + /** * Initialize the system class. Called after thread initialization. */ private static void initPhase1() { // VM might invoke JNU_NewStringPlatform() to set those encoding
*** 1920,1936 **** private static Layer bootLayer; /* * Invoked by VM. Phase 2 module system initialization. * Only classes in java.base can be loaded in this phase. */ ! private static void initPhase2() { ! // initialize the module system ! System.bootLayer = ModuleBootstrap.boot(); // module system initialized VM.initLevel(2); } /* * Invoked by VM. Phase 3 is the final system initialization: * 1. set security manager --- 1954,1982 ---- private static Layer bootLayer; /* * Invoked by VM. Phase 2 module system initialization. * Only classes in java.base can be loaded in this phase. + * + * @param printToStderr print exceptions to stderr rather than stdout + * @param printStackTrace print stack trace when exception occurs + * + * @return JNI_OK for success, JNI_ERR for failure */ ! private static int initPhase2(boolean printToStderr, boolean printStackTrace) { ! try { ! bootLayer = ModuleBootstrap.boot(); ! } catch (Exception | Error e) { ! logInitException(printToStderr, printStackTrace, ! "Error occurred during initialization of boot layer", e); ! return -1; // JNI_ERR ! } // module system initialized VM.initLevel(2); + + return 0; // JNI_OK } /* * Invoked by VM. Phase 3 is the final system initialization: * 1. set security manager
*** 2032,2041 **** --- 2078,2090 ---- return bootLayer; } public ConcurrentHashMap<?, ?> createOrGetClassLoaderValueMap(ClassLoader cl) { return cl.createOrGetClassLoaderValueMap(); } + public Class<?> defineClass(ClassLoader loader, String name, byte[] b, ProtectionDomain pd, String source) { + return ClassLoader.defineClass1(loader, name, b, 0, b.length, pd, source); + } public Class<?> findBootstrapClassOrNull(ClassLoader cl, String name) { return cl.findBootstrapClassOrNull(name); } public URL findResource(ClassLoader cl, String mn, String name) throws IOException { return cl.findResource(mn, name);
< prev index next >