0

2D 配列にプロセス ID を入力しようとすると nullpointerexception が発生します。システムごとに PID の無制限のリストがあるため 2D であり、最終的にそれをメイン コードに戻す必要があります (単なるプロトタイプであるため、今は void に設定されています)。テスト機能)。

どんなアイデアでも素晴らしいでしょう

private void testfunctionA (List<String> additionalPC) {

    // A 2d array that will contain a list of pids for each system - needs to be strings and not integers
    String[][] pidCollection = new String[additionalPC.size()][];

    // Go through one system at a time
    for (int i=0; i < additionalPC.size(); i++) {

            // Get pids for apple per system
            String listofpids = Driver.exec("ssh " +  additionalPayloads.get(i) + " ps -ef | grep -i apple | grep -v \"grep -i apple\" | awk \\' {print $2}\\'");

            // Works ok for printing for one system
            System.out.println(listofpids);
            // put the list of pids into a string array - they are separated by rows
            String[] tempPid = listofpids.split("\n");

            // Put the string array into the 2d array - put this fails with a NPE
            for (int j=0; j < tempPid.length; j++) {
                    pidCollection[i][j] = tempPid[j];
            }

            System.out.println(pidCollection);


    }
4

3 に答える 3

1

2D 配列を作成しましたが、配列はnull1D 配列でいっぱいです。2D 配列の各要素には、1D 配列を作成する必要があります。tempPid;で既に作成しています。ただそれを使用してください。それ以外の

for (int j=0; j < tempPid.length; j++) {
    pidCollection[i][j] = tempPid[j];
}

ただ使う

pidCollection[i] = tempPid;
于 2013-03-21T22:18:11.163 に答える
1

pidCollection の各要素を初期化する必要があります。

String[] tempPid = listofpids.split("\n");

pidCollection[i] = new String[tempPid.length];

// Put the string array into the 2d array - put this fails with a NPE
for (int j=0; j < tempPid.length; j++) {
        pidCollection[i][j] = tempPid[j];
}

または、この場合はもっと簡単に:

pidCollection[i] = listofpids.split("\n");
于 2013-03-21T22:18:48.813 に答える
0

簡単な答え、配列の2番目の次元を定義する必要があります

String[][] pidCollection = new String[additionalPC.size()][?????]; //this initialises the` first axis

長い答え:その行でそれを行う義務はありません。最初の次元ごとにケースバイケースで行うことができます。

pidCollection[i]=new String[tempPid.length] //this initialised the second axis for a particular i

しかし、ある時点でそれを行う必要があります。最も簡単な解決策は、そうしない理由がない限り、両方の次元を一度に定義することです。今回の場合は当てはまらないと思うのでケースバイケースで

于 2013-03-21T22:24:27.893 に答える