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

Java Swing访问远程网络文件时变量取值为null问题求助

问题原因分析

1. 代码执行顺序错误

点击"Buscar"按钮时,监听器内的代码顺序完全颠倒:

// 错误逻辑:先调用文件读取方法,再给变量赋值
DevolverValor.Leer();
text = tf.getText();

调用DevolverValor.Leer()时,Main类的静态变量text还保持初始的null值,导致Main.getNombre()返回null,生成的文件路径变成\\\\null\\C$\\SITA\\BSIA.log.1,必然触发文件找不到异常。而且由于Scanner初始化时会直接抛出异常,Leer()方法里的System.out.println(name)根本不会执行,你看到的输出大概率是后续操作中变量被正确赋值后的结果。

2. 静态变量传值的不可靠性

用静态变量text传递输入值的方式存在风险,很容易因为执行顺序、线程调度等问题导致值未及时更新。


解决方案

方案1:调整执行顺序+增加输入校验

修改Buscar按钮的监听器代码,先获取输入值再执行文件读取,同时拦截空输入:

Buscar.addActionListener(e -> {
    try {
        String inputName = tf.getText().trim();
        if (inputName.isEmpty()) {
            JOptionPane.showMessageDialog(frame, "请输入机器名称");
            return;
        }
        text = inputName;
        int count = DevolverValor.Leer();
        // 将统计结果显示到界面
        cantidad.setText("数量:" + count);
    } catch (FileNotFoundException ex) {
        JOptionPane.showMessageDialog(frame, "找不到指定文件,请检查机器名称或网络连接");
        ex.printStackTrace();
    }
});

方案2:直接传递参数(更推荐)

去掉静态变量,将输入的机器名作为参数直接传入Leer()方法,彻底避免静态变量带来的问题:

首先修改DevolverValor.java的Leer方法:

public static int Leer(String name) throws FileNotFoundException {
    String word1 = "Data:";
    int wordCount = 0;

    if (name == null || name.trim().isEmpty()) {
        throw new IllegalArgumentException("机器名称不能为空");
    }

    // 使用try-with-resources自动关闭Scanner,避免资源泄漏
    try (Scanner s = new Scanner(new File("\\\\" + name.trim() + "\\C$\\SITA\\BSIA.log.1"))) {
        while (s.hasNext()) {
            if (s.next().equals(word1)) {
                wordCount++;
            }
        }
    }
    System.out.println(name);
    return wordCount;
}

然后修改Main.java的监听器代码:

Buscar.addActionListener(e -> {
    try {
        String inputName = tf.getText().trim();
        if (inputName.isEmpty()) {
            JOptionPane.showMessageDialog(frame, "请输入机器名称");
            return;
        }
        int count = DevolverValor.Leer(inputName);
        cantidad.setText("数量:" + count);
    } catch (FileNotFoundException ex) {
        JOptionPane.showMessageDialog(frame, "找不到指定文件,请检查机器名称、网络连接或访问权限");
        ex.printStackTrace();
    } catch (IllegalArgumentException ex) {
        JOptionPane.showMessageDialog(frame, ex.getMessage());
    }
});

额外注意事项

  • 确保运行程序的用户拥有远程机器C$共享目录的访问权限,否则即使路径正确也会报错。
  • 可额外添加远程机器连通性检测(比如ping),提前排查网络问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:05:30