当使用反射从另一个主要方法调用一个Java类的主要方法,
Class thisClass = loader.loadClass(packClassName);
Method thisMethod = thisClass.getDeclaredMethod("main",String[].class);
thisMethod.invoke(null, new String[0]);
我是否该建立的newInstance()或只需调用的main(),因为它是静态的。
当使用反射从另一个主要方法调用一个Java类的主要方法,
Class thisClass = loader.loadClass(packClassName);
Method thisMethod = thisClass.getDeclaredMethod("main",String[].class);
thisMethod.invoke(null, new String[0]);
我是否该建立的newInstance()或只需调用的main(),因为它是静态的。
对于你们所要求的(动态调用一个随机类的主要方法,以反映你有很多的不必要的代码。
您可以修改下面的代码,以满足您的需求:
try {
final Class<?> clazz = Class.forName("blue.RandomClass");
final Method method = clazz.getMethod("main", String[].class);
final Object[] args = new Object[1];
args[0] = new String[] { "1", "2"};
method.invoke(null, args);
} catch (final Exception e) {
e.printStackTrace();
}
认知回答看起来是正确的; 如果你从一个罐子不是在类路径中需要负载,可以使用URL类装载器
try {
URL[] urls;
URLClassLoader urlLoader;
urls = ...;
urlLoader = new URLClassLoader(urls);
@SuppressWarnings("rawtypes")
Class runClass = urlLoader.loadClass(classToRun);
Object[] arguments = new Object[]{args};
Method mainMethod = runClass.getMethod("main", String[].class);
mainMethod.invoke(null, arguments);
} catch (Exception e) {
e.printStackTrace();
}