2012-08-02 75 views
1

我發現這個話題,但代碼不爲我工作... Return Windows cmd text from Java?的Windows CMD輸出(爪哇)

按下一個按鈕,我想執行一個批處理文件,用於測試目的後它只是ipconfig-command。

cmd的輸出應寫入到JTextFiled,但我得到的是沒有文字......

這裏它寫入JTextField中的代碼:

btnLock.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     {  
      String g = ""; 
      try { 
       Runtime.getRuntime().exec(new String[] {"ipconfig", g}); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      Process p = null; 
      try { 
       p = Runtime.getRuntime().exec(new String[] {"ipconfig", g}); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      InputStream s = p.getInputStream(); 

      BufferedReader in = new BufferedReader(new InputStreamReader(s)); 
      String temp; 

      try { 
       while ((temp = in.readLine()) != null) 
       { 
        System.out.println(temp); 
       } 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

    }); 
    btnLock.setBounds(10, 68, 89, 23); 
    contentPane.add(btnLock); 

所以我做什麼做錯了?

這是我第一個使用cmd輸入的項目,所以請不要因爲我犯的愚蠢錯誤而生氣。 ;)

THX

回答

3

試試僅接受String參數的exec命令。下面的測試代碼工作在我的系統(雖然我只是打印到控制檯,而不是文本框):

BufferedReader in = null; 
try{ 
    Process p = Runtime.getRuntime().exec("ipconfig"); 
    InputStream s = p.getInputStream(); 

    in = new BufferedReader(new InputStreamReader(s)); 
    String temp; 

    while ((temp = in.readLine()) != null) { 
     System.out.println(temp); 
    } 
} catch (Exception e){ 
    e.printStackTrace(); 
} finally { 
    if (in != null) in.close(); 
} 

而且你在原來的職位代碼也使用System.out.println。據我所知,你不能使用System.out.println打印到JTextField ....你必須使用setText方法。

+0

好吧,它與非gui應用程序正常工作。但如果我嘗試用我的GUI(和一個JTextArea)輸出只是最後一行... – user1318160 2012-08-02 20:55:55

+0

嗯。這是在一個while循環。你會想要做一些像'String outpt =「」; while((temp = ...)){outpt + = temp +「\ n」; } textField.setText(outpt);' – 2012-08-02 21:01:28

+1

好吧,它適用於textArea.append(temp); – user1318160 2012-08-02 21:01:42

3

如果我運行

ipconfig "" 

我得到

** Error: unrecognized or incomplete command line.** 

您只能從Java運行時,命令在命令行上工作。

順便說一句:如果你正在尋找錯誤,你需要閱讀錯誤流。

+0

Jep,你也應該從錯誤流中讀取。 – 2012-08-02 15:37:39

+0

Thx,我是Java新手,請原諒,但是「在命令行上工作的命令」是什麼意思?爲什麼ipconfig不能在命令行上工作? – user1318160 2012-08-02 16:36:28

+0

明確地說,'ipconfig「」'在命令行上不起作用。 'ipconfig'呢。 – 2012-08-02 16:37:30

1

我會Runtime.getRuntime().exec(new String[] {"ipconfig > temp.txt"});,然後用BufferedReader作爲文本文件來閱讀它。

我希望這會有所幫助。

+0

你有整個代碼嗎?我試圖做到這一點,但我只得到:錯誤:無法識別或不完整的命令行。 – user1318160 2012-08-02 16:34:46

+0

好吧,我使用了冰凍豌豆解決方案的Roddy,完美無缺地工作。 – user1318160 2012-08-02 21:49:52