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

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

(来自IDE风格程序运行的个别问题)

这是一个快速而肮脏的脏黑客,用于运行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 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()访问。

使用

 java -cp my.jar org.myorg.MyClass 

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

 java -jar my.jar 

清单命名jar的入口点 。

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

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

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

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