Java 如何基于注释获取类的成员变量

Java 如何基于注释获取类的成员变量,java,user-interface,annotations,Java,User Interface,Annotations,我已经创建了一个注释isAnnotatedVariable,它将有一个字符串值,并且我在另一个gui类中使用了这个注释,这个类用于标签和按钮变量,我的想法是根据注释值对这些按钮和标签进行分组,这些是声明的变量 @isAnnotatedVariable(varName = "CRD") public javax.swing.JButton crdbtn; @isAnnotatedVariable(varName="getFiles") public

我已经创建了一个注释isAnnotatedVariable,它将有一个字符串值,并且我在另一个gui类中使用了这个注释,这个类用于标签和按钮变量,我的想法是根据注释值对这些按钮和标签进行分组,这些是声明的变量

@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)