You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用InterfaceController的fileList方法传值后始终返回0或null

问题根因

你遇到的返回0/Null的核心原因是InterfaceController实例隔离:
你在Encryptor.encrypt()方法中通过new InterfaceController()创建的是局部临时实例,调用ic.fileList()修改的仅为该临时对象的属性值,和你主程序中用来读取打印的InterfaceController实例是两个完全独立的对象,属性互不共享,因此读取到的始终是初始值。如果将fileListMain改为引用类型Integer且未赋初始值,默认值就是null,符合你描述的现象。

解决方案

方案1:单例模式改造InterfaceController(推荐)

保证全程序只有一个InterfaceController实例,所有地方修改/读取的都是同一个对象的属性:

public class InterfaceController {
    // 全局唯一实例,类加载时初始化
    private static final InterfaceController INSTANCE = new InterfaceController();
    private int fileListMain = 0;
    // 私有构造方法,禁止外部随意创建实例
    private InterfaceController() {}
    // 对外提供获取唯一实例的静态方法
    public static InterfaceController getInstance() {
        return INSTANCE;
    }

    public void fileList(int list) {
        fileListMain = list;
        // 可选:取消注释即可直接更新通知文本
        //_notif.setText(fileListMain + " files are encrypted successfully!");
    }

    // 提供属性读取方法
    public int getFileListMain() {
        return fileListMain;
    }
}

修改Encryptor类中的调用逻辑,不要新建实例,直接取全局单例:

// 删掉原来的InterfaceController ic = new InterfaceController();
InterfaceController ic = InterfaceController.getInstance();
ic.fileList(files.length);

主程序中读取数值时也通过单例获取:

int count = InterfaceController.getInstance().getFileListMain();
System.out.println(count);

方案2:实例参数传递

如果不需要全局唯一控制,可将主程序中正在使用的InterfaceController实例作为参数传入encrypt方法,避免新建实例:
首先修改encrypt方法签名:

// 新增InterfaceController类型的入参
public void encrypt(File src, File dst, InterfaceController ic) throws IOException

方法内直接使用传入的ic实例调用方法即可,不要新建实例:

// 删掉原来的InterfaceController ic = new InterfaceController();
ic.fileList(files.length);

主程序调用encrypt方法时传入自己持有的InterfaceController实例即可。

其他注意事项
  • 你贴出的InterfaceController代码中private int fileListMain = 0末尾缺少分号,会导致编译报错,请补上。
  • src.listFiles()可能返回null:当源路径不是目录、或者程序没有源目录的读取权限时,listFiles返回null,直接调用files.length会触发空指针异常,建议增加判空逻辑:
File[] files = src.listFiles();
if (files == null) {
    System.out.println("无法读取源目录内容,请检查路径和权限");
    return;
}

内容的提问来源于stack exchange,提问作者Scabbard Gaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:06:04