问题是您读取了multi-line
输出
while (true) {
String line = inn.readLine();
if (line == null) {
break;
}
...
但是您始终只存储当前在文本字段中读取的行。表示先前的输出被覆盖。
...
motherboard.setText(line);
}
由于输出的最后一行是empty line
您的文本字段显示此空行(意味着您看不到任何输出)。
编辑下面添加仅是为了完整性。
一个小方法,可以作为String serialNumber = getSerialNumber()
. 它过滤掉标题行和空行。
static String getSerialNumber() throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("wmic", "baseboard",
"get", "serialnumber");
Process process = pb.start();
process.waitFor();
String serialNumber = "";
try (BufferedReader br = new BufferedReader(new InputStreamReader(
process.getInputStream()))) {
for (String line = br.readLine(); line != null; line = br.readLine()) {
if (line.length() < 1 || line.startsWith("SerialNumber")) {
continue;
}
serialNumber = line;
break;
}
}
return serialNumber;
}
另一种方法可能是已经在wmic
命令上进行过滤,并且只读取输出的第一行。
使用 Windows 提供的命令行工具
wmic baseboard get serialnumber | findstr /r /v "^$" | findstr /v "SerialNumber"
或使用自定义XSL
来控制wmic
.
另存为simple.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/"><xsl:apply-templates select="COMMAND/RESULTS"/>
</xsl:template>
</xsl:stylesheet>
并将命令运行为
wmic baseboard get serialnumber /Format:.\simple