setText()在Runtime.getRuntime()之前不起作用.exec()

时间:2015-04-28 14:34:20

标签: java swing jtextpane runtime.exec

我正在尝试模拟相同的代码,以便让您了解实际发生的事情。

    private boolean executeCommands(String[][] cmd) {
        boolean flag = true;
        String line = "";
        int i = 0;
        while(i < cmd.length) {
            appendTextToLog(cmd[i][1]);
            try {
                Process p = Runtime.getRuntime().exec(cmd[i][0]);
                p.waitFor();
            }
            catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
            i++;
        } 
        return flag;
    }

    protected boolean appendTextToLog(String s) {
        log.setText(log.getText()+s+"\n");
        return true;
    }

log是一个JTextPane。

现在我正在调用上面的函数。

   String cmd[][] = {
        {"ls -l", "Command1"},
        {"sleep 5", "SLEEPING."},
        {"ls -l", "Command2"},
        {"sleep 5", "SLEEPING."},
        {"ls -l", "Command3"}
   };
   flag = executeCommands(cmd, true, log);

所以在日志中首先应该出现“Command1”然后“SLEEPING”&amp;像这样一个接一个。

但它没有发生,从“Command1”到“Command3”,所有文本都一次出现。就像首先所有命令都在执行,然后一次附加所有文本。

我认为这是同步问题。但是无法弄明白。 请帮我。提前谢谢......

0 个答案:

没有答案