diff --git a/java/runjava/src/main/java/io/osv/ContextIsolator.java b/java/runjava/src/main/java/io/osv/ContextIsolator.java
index 96e00504bb695319d077a66f4e840d482cbec1fe..19e8e200c8aba8452822c0ba498167a08b794c1a 100644
--- a/java/runjava/src/main/java/io/osv/ContextIsolator.java
+++ b/java/runjava/src/main/java/io/osv/ContextIsolator.java
@@ -107,7 +107,9 @@ public class ContextIsolator {
                     runMain(loadClass(mainClass), args);
                 } catch (InterruptedException e) {
                     Thread.currentThread().interrupt();
-                } catch (Throwable e) {
+                } catch (MainClassNotFoundException e) {
+		    context.setException(e);
+		} catch (Throwable e) {
                     getUncaughtExceptionHandler().uncaughtException(this, e);
                 }
             }
@@ -253,8 +255,13 @@ public class ContextIsolator {
         return new File(path).isDirectory();
     }
 
-    private static Class<?> loadClass(String name) throws ClassNotFoundException {
-        return Thread.currentThread().getContextClassLoader().loadClass(name);
+    private static Class<?> loadClass(String name) throws MainClassNotFoundException {
+        try {
+	    Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(name);
+	    return clazz;
+	} catch (ClassNotFoundException ex) {
+	    throw new MainClassNotFoundException(name);
+	}
     }
 
     // Expand classpath, as given in the "-classpath" option, to a list of
diff --git a/java/runjava/src/main/java/io/osv/MainClassNotFoundException.java b/java/runjava/src/main/java/io/osv/MainClassNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c57060a9cd945dbd2e52a675f4cb8b28fec3bf8
--- /dev/null
+++ b/java/runjava/src/main/java/io/osv/MainClassNotFoundException.java
@@ -0,0 +1,21 @@
+package io.osv;
+
+/*
+ *   Copyright (C) 2014 Jaspal Singh Dhillon
+ *
+ *   This work is open source software, licensed under the terms of the
+ *   BSD license as described in the LICENSE file in the top-level directory.
+ */
+
+public class MainClassNotFoundException extends Exception {
+
+    private String mainClassName;
+
+    public MainClassNotFoundException(String mainClass) {
+	mainClassName = mainClass;
+    }
+
+    public String getClassName() {
+        return mainClassName;
+    }
+}
diff --git a/java/runjava/src/main/java/io/osv/RunJava.java b/java/runjava/src/main/java/io/osv/RunJava.java
index 6c8c005809c60c4bbeb14fc023d7599a98b3de56..a826f24c13fb3d237f91b2e8fe91b53cb486ecd4 100644
--- a/java/runjava/src/main/java/io/osv/RunJava.java
+++ b/java/runjava/src/main/java/io/osv/RunJava.java
@@ -26,7 +26,13 @@ public class RunJava {
             ContextIsolator.getInstance().runSync(args);
         } catch (IllegalArgumentException ex) {
             System.err.println("RunJava: " + ex.getMessage());
-        } catch (Throwable ex) {
+        } catch (ContextFailedException ex) {
+	    if (ex.getCause() instanceof MainClassNotFoundException) {
+	        System.err.println("Error: Could not find or load main class " + ((MainClassNotFoundException)ex.getCause()).getClassName());
+	    } else {
+	        ex.printStackTrace();
+	    }
+	} catch (Throwable ex) {
             ex.printStackTrace();
         }
     }