Java 如何基于注释获取类的成员变量
我已经创建了一个注释isAnnotatedVariable,它将有一个字符串值,并且我在另一个gui类中使用了这个注释,这个类用于标签和按钮变量,我的想法是根据注释值对这些按钮和标签进行分组,这些是声明的变量Java 如何基于注释获取类的成员变量,java,user-interface,annotations,Java,User Interface,Annotations,我已经创建了一个注释isAnnotatedVariable,它将有一个字符串值,并且我在另一个gui类中使用了这个注释,这个类用于标签和按钮变量,我的想法是根据注释值对这些按钮和标签进行分组,这些是声明的变量 @isAnnotatedVariable(varName = "CRD") public javax.swing.JButton crdbtn; @isAnnotatedVariable(varName="getFiles") public
@isAnnotatedVariable(varName = "CRD")
public javax.swing.JButton crdbtn;
@isAnnotatedVariable(varName="getFiles")
public javax.swing.JButton getFilesbtn;
@isAnnotatedVariable(varName="last")
public javax.swing.JButton lastbtn;
@isAnnotatedVariable(varName="CRD")
public javax.swing.JLabel crdlbl;
@isAnnotatedVariable(varName="getFiles")
public javax.swing.JLabel getFileslbl;
@isAnnotatedVariable(varName="last")
public javax.swing.JLabel lastlbl;
public javax.swing.JPanel jPanel1;
现在我想分组,让他们做一些下面提到的操作
private void jButton3MouseClicked(java.awt.event.MouseEvent evt)
{
try
{
for(Field field : TestUi.class.getFields())
{
isAnnotatedVariable s = field.getAnnotation(isAnnotatedVariable.class);
if(s.varName().equals("CRD"))
{
if(field.toString().contains("lbl"))
{
System.out.println("Label "+field);
Class<?> o = field.getType();
System.out.println(o.getName());
o = (Class<?>) ClassLoader.getSystemResource(field.toString()).getClass();
System.out.println(o);
//o = (Class<?>) Class.forName(field.toString());
o.getAnnotation(isAnnotatedVariable.class).varName();
//Object d= o.newInstance();
Method m =o.getDeclaredMethod("setText", cArg);
m.invoke(o, "Hello");
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
其中第187行是o=Class ClassLoader.getSystemResourcefield.toString.getClass 这条线应该做什么?它尝试获取名称等于字段名的资源的URL。下面的三行语句-表达式的值会发生什么变化?我想使用lbl并设置一些文本,但是我不知道如何在标签上执行操作,并且做了一些不起作用的事情。我知道了一般的想法-但是为什么你需要以如此复杂的方式进行文本设置?你能分享你的源代码吗?我的问题是,在我的过程中,每一步我都应该执行一个类文件,我应该执行哪一个,我将动态选择,因此当我在UI中执行该类时,应该相应地启用和禁用该步骤的相应标签和按钮
java.lang.NullPointerException
at annotationexmaple.TestUi.jButton3MouseClicked(TestUi.java:187)
at TestUi.access$2(TestUi.java:157)
at TestUi$3.mouseClicked(TestUi.java:84)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)