import java.lang.reflect.*; public class NiftyThread extends java.lang.Thread { private Object classToCall; private Object [] args; private String methodName; public NiftyThread(Object classToCall, Object [] args, String methodName) { this.classToCall = classToCall; this.args = args; this.methodName = methodName; start(); } public void run() { try { if (args == null) args = new Object [] {}; Class [] classArgs = new Class [args.length]; for (int i = 0; i < args.length; i++) classArgs[i] = args[i].getClass(); Method m = classToCall.getClass().getDeclaredMethod(methodName, classArgs); m.invoke(classToCall, args); } catch(NoSuchMethodException e) { e.printStackTrace(System.out); } catch(Exception e) { e.printStackTrace(System.out); } } }