Layout类获取JTextField值的方法本类正常跨类调用返回null是什么原因
问题原因
你遇到的问题核心来自两个常见的编码错误:
实例不统一
你在第二个类里调用getNameAcc()时用到的Layout实例l,和实际点击登录按钮、完成name字段赋值的Layout实例不是同一个对象。你大概率是在第二个类里重新new了一个Layout对象,这个新对象的name字段从未被赋值过,默认就是null。调用时机错误
看你第二个类的代码片段,SENDER_PATH被定义为final常量,这类常量会在类加载/类实例初始化阶段就完成值计算。如果这个初始化操作发生在你点击登录按钮触发name赋值之前,就算你用的是同一个Layout实例,拿到的也会是未赋值的null。哪怕你说这个调用是在按钮的ActionListener里执行的,也要确认这个按钮的点击操作是发生在登录成功之后。
修复方案
- 确保所有类共用同一个已完成登录操作的
Layout实例:可以把登录成功的Layout实例通过构造方法、setter方法传递给第二个类,不要在第二个类里自行创建新的Layout对象。 - 不要提前计算
SENDER_PATH的值:取消SENDER_PATH的final修饰,不要在类初始化阶段就拼接路径,等到真正要用到路径的时候,再调用l.getNameAcc()实时拼接。 - 可以加个非空校验,调用
getNameAcc()前先判断返回值是否为null,如果为null先提示用户完成登录操作,避免后续空指针异常。
内容的提问来源于stack exchange,提问作者Emil S
相关产品推荐
相关产品推荐

