2

Javaからexpectスクリプトを実行しています。しかし、次のエラーが発生します。

スレッド「メイン」の例外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)で

手動でexpectスクリプトを実行でき、正常に動作します。

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でしょう。そのための基盤となるAPIはまったく好きではありません。(また、Expectは実際にはnullを処理しません。)ProcessBuildernullnull

于 2012-08-30T07:48:59.340 に答える