的問題是,你讀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
命令和只讀從輸出的第一行。
要麼使用自定義XSL
控制的wmic
輸出由Windows
wmic baseboard get serialnumber | findstr /r /v "^$" | findstr /v "SerialNumber"
或提供commandlline工具。
保存爲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
你不應該忽略異常。至少將它寫入日誌。在這種情況下,它會告訴你錯誤的原因。 – blafasel
[獲取操作系統級別的系統信息]的可能重複(http://stackoverflow.com/questions/25552/get-os-level-system-information) – vzamanillo
它不能告訴我什麼是異常。當我在控制檯中運行它然後它工作正常,但是當我嘗試它gui然後不工作,並且不顯示在jTextfield –