summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/runtime/FirstThread.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/gcj/runtime/FirstThread.java')
-rw-r--r--libjava/gnu/gcj/runtime/FirstThread.java51
1 files changed, 45 insertions, 6 deletions
diff --git a/libjava/gnu/gcj/runtime/FirstThread.java b/libjava/gnu/gcj/runtime/FirstThread.java
index fd59261c8c8..c52ab42c0ef 100644
--- a/libjava/gnu/gcj/runtime/FirstThread.java
+++ b/libjava/gnu/gcj/runtime/FirstThread.java
@@ -17,11 +17,44 @@ import java.util.jar.*;
* @date August 24, 1998
*/
-// This is entirely internal to our implementation.
-
-final class FirstThread
+final class FirstThread extends Thread
{
- public static String getMain (String name)
+ public FirstThread (Class k, String[] args)
+ {
+ super (null, null, "main");
+ klass = k;
+ this.args = args;
+ }
+
+ public FirstThread (String class_name, String[] args, boolean is_jar)
+ {
+ super (null, null, "main");
+ klass_name = class_name;
+ this.args = args;
+ this.is_jar = is_jar;
+ }
+
+ public void run()
+ {
+ if (is_jar)
+ klass_name = getMain(klass_name);
+
+ if (klass == null)
+ {
+ try
+ {
+ klass = Class.forName(klass_name);
+ }
+ catch (ClassNotFoundException x)
+ {
+ throw new NoClassDefFoundError(klass_name);
+ }
+ }
+
+ call_main();
+ }
+
+ private String getMain (String name)
{
String mainName = null;
try {
@@ -37,15 +70,21 @@ final class FirstThread
}
if (mainName == null)
- System.err.println ("Failed to load Main-Class manifest attribute from\n"
- + name);
+ {
+ System.err.println ("Failed to load Main-Class manifest attribute from\n"
+ + name);
+ System.exit(1);
+ }
return mainName;
}
+ private native void call_main ();
+
// Private data.
private Class klass;
private String klass_name;
private Object args;
+ private boolean is_jar;
// If the user links statically then we need to ensure that these
// classes are linked in. Otherwise bootstrapping fails. These
OpenPOWER on IntegriCloud