2012-05-04 17 views
0

私は、エラー、次の取得Runtime.getRuntime().exec(cmd);なぜシステム情報を取得すると例外のヌルポイントが返されるのですか?

とシステム情報を取得するためにtrayingています

java.lang.NullPointerException 
    at java.lang.Runtime.exec(Runtime.java:422) 
    at java.lang.Runtime.exec(Runtime.java:326) 
    at mytest.SystemInfoToTextArea.doInBackground(SystemInfoToTextArea.java:31) 
    at mytest.SystemInfoToTextArea.doInBackground(SystemInfoToTextArea.java:16) 

任意の提案を歓迎

クラスのコード

public class SystemInfoToTextArea extends SwingWorker<String, Void> { 
private JTextArea textArea; 
private String cmd; 

public SystemInfoToTextArea(JTextArea textArea, String cmd) { 
    textArea = textArea; 
    cmd = cmd; 
} 

@Override 
protected String doInBackground() throws Exception { 
    String outputMem = null; 
    try { 
     String lineMem; 
     outputMem = ""; 
     Process procMem = Runtime.getRuntime().exec(cmd); 
     BufferedReader input = 
       new BufferedReader 
         (new InputStreamReader(procMem.getInputStream())); 
     while ((lineMem = input.readLine()) != null) { 
      outputMem = (lineMem + "\n"); 

     } 

     input.close(); 
    } catch (Exception err) { 
     err.printStackTrace(); 
    } 
    return outputMem; 
} 

@Override 
protected void done() { 
    super.done(); 
    try { 
     textArea.append(get()); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

} 

public static void main(String... args){ 
    JFrame frame = new JFrame(); 
    frame.setSize(700,500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel = new JPanel(); 
    JTextArea textArea = new JTextArea("System info"); 

    panel.add(textArea); 
    frame.setContentPane(panel); 

    frame.setVisible(true); 

    SystemInfoToTextArea systemInfoToTextArea = new SystemInfoToTextArea(textArea,"cmd /C dir"); 
    systemInfoToTextArea.execute(); 

} 
} 

答えて

8

あなたcmdを私あなたのコンストラクタコードが間違っているので、明らかにnullです。書き込む

this.cmd = cmd; 

同じですtextArea。

3

あなたのコンストラクタは、あなたが考えて何をしていません。(!自分の価値観に)

public SystemInfoToTextArea(JTextArea textArea, String cmd) { 
    textArea = textArea; 
    cmd = cmd; 
} 

これは単にパラメータを再割り当て、およびフィールドと同じ名前を持つを設定しません。あなたは何をしたいのですか?

public SystemInfoToTextArea(JTextArea textArea, String cmd) { 
    this.textArea = textArea; 
    this.cmd = cmd; 
} 

まともなIDEはこの間違いを警告します。

+0

再割り当てしていない、それはノーオペレーションです。 –

+0

私はIntellijを使用します。彼は警告も文句もしませんでした。 – itro

+0

コンストラクタを訂正した後、'java.io.IOException:CreateProcess:free -m -t -o error = 2 \t java.lang.ProcessImpl.create(ネイティブメソッド) \t at java.lang。 ProcessImpl。 (ProcessImpl.java:81)java.lang.ProcessImpl.startで \t(ProcessImpl.java:30)java.lang.ProcessBuilder.startで \t(ProcessBuilder.java:451)java.lang.Runtimeで \t .exec(Runtime.java:591)は、java.lang.Runtime.exec(Runtime.java:429)で \t mytest.SystemInfoToTextAreaでは、java.lang.Runtime.exec(Runtime.java:326) \tで\t。 doInBackground(SystemInfoToTextArea.java:31) \t ' – itro

関連する問題