2

我正在从 java 运行一个期望脚本。但我收到以下错误:

线程“主”java.lang.NullPointerException 中的异常
        在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1010)
        在 java.lang.Runtime.exec(Runtime.java:615)
        在 java.lang.Runtime.exec(Runtime.java:483)
        在 ExpectInJava.main(ExpectInJava.java:24)

我能够手动运行期望脚本,它工作正常。

import java.io.IOException;

public class ExpectInJava {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[]params = new String[] {
                "/runScp.expect",
                "/runScp.expect",
                "root@10.21.21.21:/tmp",
                null,
                ""+22,
                ""+600,
                ""+2405,
                ""+"/var/db/host/privatekeys/"+"newsshcred"
                };

        try {
            Process process = Runtime.getRuntime().exec(params);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("e"+e);
        }

    }
4

3 回答 3

4

null从数组中删除

String[]params = new String[] {
        "/runScp.expect",
        "/runScp.expect",
        "root@10.21.21.21:/tmp",
        "",
        ""+22,
        ""+600,
        ""+2405,
        ""+"/var/db/host/privatekeys/"+"newsshcred"
        };
于 2012-08-30T07:48:11.750 回答
2

看一下 exec 方法的文档

482       public Process exec(String cmdarray[]) throws IOException {
483           return exec(cmdarray, null, null);
484       }

它说明何时抛出这样的异常:

472        * @throws  NullPointerException
473        *          If <code>cmdarray</code> is <code>null</code>,
474        *          or one of the elements of <code>cmdarray</code> is <code>null</code>
475        *

阅读第474行

于 2012-08-30T07:54:20.537 回答
1

null那在params阵列中做什么?虽然ProcessBuilder可以接受一个字符串数组,但它们最好是真正的字符串,而不是null因为它们将作为参数传递给子进程,而底层 API 根本不喜欢null。(另外,Expect真的不处理空值。)

于 2012-08-30T07:48:59.340 回答