求助:oshi 6.1.6中LinuxNetworkParams.getDomainName调用抛出NPE的原因
LinuxNetworkParams.getDomainName() 抛出NullPointerException的可能原因
报错堆栈
Caused by: java.lang.NullPointerException
at oshi.software.os.linux.LinuxNetworkParams.getDomainName(LinuxNetworkParams.java:80) ~[oshi-core-6.1.6.jar!/:6.1.6]
at com.airwatch.common.diagnostics.DiagnosticCollector.fetchSystemConfiguration(DiagnosticCollector.java:148) ~[diagnostic-library-2.0.3.jar!/:?]
可能原因
- 不符合规范的/etc/resolv.conf配置:如果/etc/resolv.conf中存在以
domain或search开头的行,但该行仅有前缀和空白字符(无实际域名内容),执行line.split("\\s+")后会得到长度为1的数组,访问索引[1]时理论上会抛出数组越界异常,但在某些特殊环境下可能被包装为NullPointerException。 - 异常的文件读取场景:极端情况下,读取/etc/resolv.conf时可能因文件系统异常、并发修改等问题,导致读取到null内容的行,此时调用
line.split()方法会直接抛出NullPointerException(尽管Java规范中Files.lines()返回的流元素应为非null字符串,但实际场景中存在边缘case)。 - 版本固有bug:Oshi 6.1.6版本的该方法未对split结果的数组长度做校验,即使filter逻辑确保行开头有前缀+空格,仍可能因后续全为空白字符导致split后数组长度不足,引发异常。后续版本的Oshi已修复此类问题,建议升级至较新版本规避。
内容的提问来源于stack exchange,提问作者kushal agrawal
相关产品推荐
相关产品推荐

