Index: modules/kernel/src/main/java/java/lang/System.java =================================================================== --- modules/kernel/src/main/java/java/lang/System.java (revision 412200) +++ modules/kernel/src/main/java/java/lang/System.java (working copy) @@ -100,7 +100,7 @@ * the new value for out. */ public static void setOut(java.io.PrintStream newOut) { - throw new RuntimeException("not implemented"); + setPrintStream("out", newOut); } /** @@ -111,9 +111,12 @@ * the new value for err. */ public static void setErr(java.io.PrintStream newErr) { - throw new RuntimeException("not implemented"); + setPrintStream("err", newErr); } + private static native void setPrintStream(String field, + java.io.PrintStream stream); + /** * Prevents this class from being instantiated. */ Index: vmi/vmi.cpp =================================================================== --- vmi/vmi.cpp (revision 412200) +++ vmi/vmi.cpp (working copy) @@ -285,6 +285,22 @@ return tv.tv_sec * (jlong)1000 + tv.tv_usec / 1000; } + JNIEXPORT void JNICALL Java_java_lang_System_setPrintStream + (JNIEnv *env, jclass c, jstring field, jobject stream) { + jfieldID fid; + const char *field_name = env->GetStringUTFChars(field, 0); + if (!field_name) { + return; + } + fid = env->GetStaticFieldID(c, field_name, "Ljava/io/PrintStream;"); + env->ReleaseStringUTFChars(field, field_name); + if (!fid) { + return; + } + env->SetStaticObjectField(c, fid, stream); + return; + } + JNIEXPORT void JNICALL Java_java_lang_VMThread_attach (JNIEnv *env, jobject) { hythread_attach(NULL);