我一直在学习Java,在过去的几周里,我为实践目的创建了一堆类。它让我觉得创建一个允许我查看我创建的所有类的列表并通过选择我想要的类来运行它的类很酷。
我这样做的方式以及我走了多远:
HashMap<Integer,String>
所有类的列表。现在问题来了。
我最后以一个名为Clock.class
的字符串结束。
我想跑这个。怎么样?
让我说我知道我想要上课。我可以简单地使用Clock.main()
这里的问题是我不知道在运行时运行哪个类,所以我迷路了。
我一直在使用Reflection API。我能够实例化Clock.class的一个对象,但没有任何反应。
也许我根本不应该使用反射?也许有一种更简单的方法?
这是我被困的地方,我希望有人可以开导我。 :)
答案 0 :(得分:2)
您可以使用反射来调用类的主方法:
Class<?> cls = Class.forName("package.path.yourClassName");
Method m = cls.getMethod("main", String[].class); //mandatory signature for main()
String[] params = null; // any params on the call?
m.invoke(null, (Object) params);
注意:invoke()
的第一个参数是您要调用该呼叫的实例。但静态方法并不属于实例,因此使用null
。
答案 1 :(得分:1)
通过SimpleFileVisitor
遍历您的类文件的文件路径。将文件名和路径存储在Map中。当用户选择时,让我们说Clock.class
获取与之对应的路径并启动另一个java进程。
简单地做
Process process = Runtime.getRuntime().exec("/pathToJDK/bin/java", pathToClassFile);
您可以使用I / O和错误流,例如 -
InputStream inputStream= process .getErrorStream();
//print this stream