【发布时间】:2013-02-07 00:09:09
【问题描述】:
这段代码 sn-p 允许我在我的程序中运行一个 jar:
File f = new File("client.jar");
URLClassLoader cl = new URLClassLoader(new URL[]{f.toURI().toURL(), null});
Class<?> clazz = cl.loadClass("epicurus.Client");
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, new Object[]{new String[]{}});
无论如何我可以参考该外部程序的类吗?
例如,我希望能够更改其 JFrame 的标题。
【问题讨论】:
-
标题属性在 JFrame 的 instances 上,而不是在类上。虽然您可以使用反射检查类,但不能操作实例。
-
@SteveH。 - 嗯?当然你可以......这有点反思。
Field.set(objInstance, fieldValue)... 你去吧,我只是操纵了一个实例。 -
@BrianRoach 你是对的——也许我应该说你不能“获得”实例。您如何知道创建了一个新的 JFrame 以及从哪里获得参考?我的假设是jar文件是未知的
-
@SteveH。 - 呃,你会......做下面答案中发布的那个人。
-
@BrianRoach Erm .. 除非 JFrame 已经实例化,否则它将不起作用。但是谢谢你的狡猾。
标签: java class reflection