如何打开并运行已编译的Java文件?

时间:2010-10-29 07:57:32

标签: java

如何在Java程序中打开.class或.jar文件? (请记住.jar文件可能有多个带有main(String [] args)方法的类)

(来自IDE-Style program running的个别问题)

5 个答案:

答案 0 :(得分:4)

这是一个快速而又脏的 hack ,用于运行jar中的所有主要方法。

import java.io.*;

class JarRunner {

    public static void main(String[] args) throws IOException,
                                                  ClassNotFoundException {

        File jarFile = new File("test.jar");
        URLClassLoader cl = new URLClassLoader(new URL[] {jarFile.toURL() });
        JarFile jf = new JarFile(jarFile);

        Enumeration<JarEntry> entries = jf.entries();
        while (entries.hasMoreElements()) {
            JarEntry je = entries.nextElement();
            String clsName = je.getName();

            if (!clsName.endsWith(".class"))
                continue;

            int dot = clsName.lastIndexOf('.');
            Class<?> clazz = cl.loadClass(clsName.substring(0, dot));
            try {
                Method m = clazz.getMethod("main", String[].class);
                m.invoke(null, (Object) new String[0]);
            } catch (SecurityException e) {
            } catch (NoSuchMethodException e) {
            } catch (IllegalArgumentException e) {
            } catch (IllegalAccessException e) {
            } catch (InvocationTargetException e) {
            }
        }
    }
}

正如其他海报所提到的,您可能希望查看主类的清单文件(因此您不必猜测)。这可以通过JarFile.getManifest()访问。

答案 1 :(得分:3)

使用

java -cp my.jar org.myorg.MyClass

如果MyClass是你要开始的那个。如果my.jar有一个指示MyClass的正确MANIFEST.MF文件,则可以使用

java -jar my.jar

答案 2 :(得分:2)

清单命名jar的entry point

答案 3 :(得分:1)

您可以使用任何压缩软件(winrar,winzip,7zip)打开.jar,然后使用java.exe运行.class文件

答案 4 :(得分:0)

我认为您的问题是关于在编译时不了解外部类的规范的情况。我是对的吗?

因此,您需要使用反射API来创建必要类的实例并调用其方法。你可以看到上面的例子。

要确定从jar文件运行的类,您应该使用包'java.util.jar'来通过Manifest类访问清单。您可以从属性'Main-Class'确定此jar的入口点。