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
相关产品推荐
相关产品推荐

