2013-07-21 159 views
0

我正在开发一个使用Runtime.getRuntime.execute()运行cmd命令的swing应用程序。并使用BufferReader读取命令的输出。现在我想要的是,我希望在对话框中显示输出内容,使用其中的文本(使用JTextPane)或附加的字符串在textarea中输出命令,就像我们在启动任何其他IDE的Eclipse的Eclipse的加载先决条件时所看到的一样。在对话框中更改文本

我试过做JDialog类的子类,但它没有做我想做的事。

我的代码:

Process p = Runtime.getRuntime().exec(commandToBeExecuted); 
      BufferedReader in = new BufferedReader(newInputStreamReader(p.getInputStream())); 
      String line = null; 
        MessageDialog myDialog=new MessageDialog(UserInterface.this); 

      while ((line = in.readLine()) != null) { 
        System.out.println(line); 
        myDialog.setText(line); 
        myDialog.setVisible(true); 
        myDialog.setLocationRelativeTo(UserInterface.this); 
      } 
     } catch (Exception ex) { 
      Logger.getLogger(UserInterface.class.getName()).log(Level.SEVERE, null, ex); 
      errorGlobal.setText("Some Exception Occured in update "+ex.getMessage()); 
      System.out.println("Exception occured " + ex.getMessage()); 
     } 

是否有可能做我想做的,什么将是实现这一目标的最佳方式是什么?

+0

1)阅读(并实现)*所有* [当Runtime.exec()不会](http://www.javaworld.com/ JW-12-2000/JW-1229-traps.html)。这可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用'exec'并使用'ProcessBuilder'构建'Process'。还要将'String arg'分解为'String [] args'来解释其本身包含空格的参数。 2)为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。 –

+0

你说这是“没有做我想做的事”。你是什​​么意思? – tbodt

+0

请看看[示例](https://www.dropbox.com/s/ocv7zhospy95map/SwingWorkerExample.java),它可能会给你想要的想法。只需运行程序,单击'开始'按钮,然后在控制台上输入任何内容,它将显示在'JTextArea'上,如果您想停止从'控制台'读取数据,请点击'停止'按钮。虽然它还没有完全完成,但它现在正在进行:-) –

回答

0

你的问题是在循环中。使用JTextArea.append并将其余部分放在循环之外,

+0

我没有使用JtextArea所有我正在使用附加文本是第二选择我想改变与新的不工作的相同文本。 – pyus13

+0

*“我不使用JtextArea”*为了更好的帮助,早点啊,为什么要麻烦?你之前忽略了我。 –