首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么检索系统信息会返回空异常点?

为什么检索系统信息会返回空异常点?
EN

Stack Overflow用户
提问于 2012-05-04 14:02:36
回答 2查看 409关注 0票数 0

我要尝试用Runtime.getRuntime().exec(cmd);获取系统信息

我得到以下错误:

代码语言:javascript
复制
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)

任何建议欢迎

代码语言:javascript
复制
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();

}
}
EN

回答 2

Stack Overflow用户

发布于 2012-05-04 14:04:28

您的cmd显然是null,因为构造函数代码是错误的。写

代码语言:javascript
复制
this.cmd = cmd;

textArea也一样。

票数 8
EN

Stack Overflow用户

发布于 2012-05-04 14:08:08

你的构造函数不做你想做的事:

代码语言:javascript
复制
public SystemInfoToTextArea(JTextArea textArea, String cmd) {
    textArea = textArea;
    cmd = cmd;
}

这只是重新分配参数(它们自己的值!),而不是用相同的名称设置字段。您要做的是在它们的前面加上以下内容:

代码语言:javascript
复制
public SystemInfoToTextArea(JTextArea textArea, String cmd) {
    this.textArea = textArea;
    this.cmd = cmd;
}

一个像样的IDE会提醒你这个错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10450405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档