怎么在一个java类main方法中调用另一个类中的main方法
如何在一个java类main方法中调用另一个类中的main方法
在项目中用到了在一个java类main方法中调用另一个类中的main方法来解决java1.2不能使用Axis的问题。在网上查了查发现还真能调用。这用到了java的反射机制。
下面直接写例子吧:
这个类是被调用的main方法类:
public class Run { public static void main(String[] args) { String str=args[0]+"Hello World"; System.out.println(str); } }
下面是调用main方法的类:
public class JobRun { public static void main(String[] args) { String idStr = "YAya"; try { Method method = Run.class.getMethod("main", String[].class); method.invoke(null, (Object) new String[] { idStr }); } catch (Exception e) { e.printStackTrace(); } } }
在写程序时,调用Method类的方法invoke(Object,Object)时老是报参数类型不匹配。我是这样写的method.invoke(Run.class.newInstance(),(Object) new String[]{idStr});错就错在main方法是类Run的静态方法,调用时是不需要对象实例的。
还有一个兼容问题:
method.invoke(null, new String[]{"ma","xiao"}); //★这思想是对的,但是版本问题,不允许了 //现在对了,然后还报 wrong number of arguments,下面详细说明 //:: //现在说参数的个数不对 //我要的方法我已经说了,它需要一个参数,那个参数是一个数组 //如果按照1.5的语法,是没有问题的 //但是SUN必须要考虑到老版本, //老版本的语法,很多的时候拿到一个数组时,它会迈力的给你一个一个拆开 //而JVM又是按照老版本的方法执行的, //所以这里我传的new String[]{"ma","xiao"}被它拆成两个参数了 //所以如果我只传一个,new String[]{"ma"},还是拆,说argument type mismatch, //当然,需要的是数组,你给个字串当然 argument type mismatch //怎么办,你既然要拆,那我最多再给你包一层,让你去拆吧 method.invoke(null, new Object[]{new String[]{"ma","xiao"}}); //这样,JVM一拆,拆出的一个数组,正是我想要的效果 run OK! //还有一个方法 method.invoke(null, (Object)new String[]{"hello","world"}); //强制转成一个 Object 1.4不是看见数组参数就拆么?[数组的引用应该是不会拆的] //现在 JVM看不见数组了,不拆了,run OK!
就这么多了,希望对大家有帮助
1 楼
pangchaofu
2011-09-12
正好遇到这错误,学习了。