package gnu.gcj.runtime;
import java.util.jar.*;
final class FirstThread extends Thread
{
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 {
JarFile j = new JarFile (name);
Attributes a = j.getManifest().getMainAttributes();
mainName = a.getValue(Attributes.Name.MAIN_CLASS);
} catch (Exception e) {
}
if (mainName == null)
{
System.err.println ("Failed to load Main-Class manifest attribute from\n"
+ name);
System.exit(1);
}
return mainName;
}
private native void call_main ();
private Class klass;
private String klass_name;
private Object args;
private boolean is_jar;
static final Class Kcert = java.security.cert.Certificate.class;
static final Class Kfile = gnu.gcj.protocol.file.Handler.class;
static final Class Khttp = gnu.gcj.protocol.http.Handler.class;
static final Class Kjar = gnu.gcj.protocol.jar.Handler.class;
}