使用Set/Get保存文件路径时Set有值但Get返回null问题咨询
问题原因分析
你遇到的get()返回null的核心问题是对象实例不统一:在actionPerformed方法里,你每次都新建了一个GetSet对象(GetSet get = new GetSet();),这意味着你调用set()方法时用的是一个实例,而后续调用get()时用的是另一个全新的实例——两个实例各自独立,自然拿不到之前存储的路径值。
解决方案
解决思路很简单:确保所有调用set()和get()的操作都使用同一个GetSet实例,下面给两种常用实现方式:
方式一:将GetSet作为类成员变量
把GetSet实例声明为Action类的成员变量,而不是在方法内每次新建,这样整个类的方法都共享同一个实例:
public class Action implements ActionListener{ // 声明类成员变量,共享同一个GetSet实例 private GetSet getSet; // 在构造方法中初始化实例 public Action() { getSet = new GetSet(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource().equals(saveProject)){ try { CreateProject op = new CreateProject(); // 从文件选择器获取路径(这里替换成你实际获取路径的代码) String selectedPath = ...; // 用同一个实例调用set方法 getSet.setFilePath(selectedPath); System.out.println("已保存路径:" + selectedPath); } catch (Exception ex) { ex.printStackTrace(); } } // 假设你有另一个触发get操作的按钮 else if(e.getSource().equals(loadProject)){ // 用同一个实例调用get方法 String savedPath = getSet.getFilePath(); System.out.println("获取到的路径:" + savedPath); } } }
方式二:将GetSet实现为单例模式
如果需要在多个类之间共享这个路径,推荐把GetSet改成单例模式,确保全局只有一个实例:
先修改GetSet类为单例:
public class GetSet { private String filePath; // 全局唯一实例 private static GetSet uniqueInstance; // 私有构造方法,禁止外部直接new private GetSet() {} // 获取全局实例的方法 public static GetSet getInstance() { if(uniqueInstance == null) { uniqueInstance = new GetSet(); } return uniqueInstance; } // 你的set方法 public void setFilePath(String filePath) { this.filePath = filePath; } // 你的get方法 public String getFilePath() { return filePath; } }
然后在Action类中使用单例:
public class Action implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getSource().equals(saveProject)){ try { CreateProject op = new CreateProject(); String selectedPath = ...; // 获取文件路径 // 调用单例的set方法 GetSet.getInstance().setFilePath(selectedPath); } catch (Exception ex) { ex.printStackTrace(); } } else if(e.getSource().equals(loadProject)){ // 调用单例的get方法 String savedPath = GetSet.getInstance().getFilePath(); // 处理路径 } } }
关键提醒
不管用哪种方式,核心都是避免每次操作都新建GetSet对象,保证set和get操作指向同一个实例,这样才能正确保存和读取数据。
内容的提问来源于stack exchange,提问作者McRoland
相关产品推荐
相关产品推荐

