让我说我在代码中的某处有一个按钮:"JButton closeButton".我不知道它被称为"closeButton",但这就是我想要找到的.
在运行时,单击该按钮,一旦它完成,我可以通过反射和AWT api找到很多关于它的信息 - 但我不能做的是找出它在哪里 - 如何在代码中调用它,名字是什么它声明为("closeButton").
是否有可能从JVM中找到它?
有没有办法以这样的方式编译和运行代码,以便在运行时保留实例的名称?
是否有某种类型的'javaagent'(尽可能免费)可以帮助我解决这种情况?
谢谢
编辑(美国东部时间14:23):
我使用一个按钮作为示例,但它可以是任何类型的组件,可以保存值并附加ActionListeners.我可以通过对该组件的反思来获取每一点信息,但我无法在代码中找到它.即使有10个组件已经声明了相同的名称,这仍然给了我一个领先,我可以消除可能性.
import java.lang.reflect.*;
public class field1 {
private double d;
public static final int i = 37;
String s = "testing";
public static void main(String args[])
{
try {
Class cls = Class.forName("field1");
Field fieldlist[]
= cls.getDeclaredFields();
for (int i
= 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name
= " + fld.getName());
System.out.println("decl class = " +
fld.getDeclaringClass());
System.out.println("type
= " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " +
Modifier.toString(mod));
System.out.println("-----");
}
}
catch (Throwable e) {
System.err.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
}
这应该为您提供该类的所有字段的列表.
简短的回答:这是不可能的。
详细信息:您所说的name实际上与 的实例无关JButton。它只是保存引用的变量,允许在运行时访问该实例。这个示例代码将更清楚地显示这一点:
JButton newButton = new JButton();
JButton otherButton = newButton;
Run Code Online (Sandbox Code Playgroud)
这里两个变量都保存对同一个 JButton 实例的引用。
| 归档时间: |
|
| 查看次数: |
1350 次 |
| 最近记录: |