import java.lang.reflect.*; public class NullPo { public static void main(String[] args) { if (args.length == 0) { System.out.println("usage:java NullPo app-class-name app-args..."); System.exit(1); } try { Class clazz = Class.forName(args[0]); Class[] types = { args.getClass() }; Method method = clazz.getMethod("main", types); String[] argz = new String[args.length - 1]; System.arraycopy(args, 1, argz, 0, argz.length); Object arglist[] = { argz }; try { method.invoke(null, arglist); } catch (IllegalAccessException e) { System.err.println("main() method is not public."); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { throw e.getCause(); } } catch (NoSuchMethodException e) { System.err.println("the class has no main() method."); } catch (ClassNotFoundException e) { System.err.println("no class found."); } catch (NullPointerException e) { System.err.println("\uff76\uff9e\uff6f"); e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } }
意外と面倒。InvocationTargetException のあたりとか。