0

当我尝试用进程 ID 填充二维数组时出现 nullpointerexception,它是二维的,因为每个系统都有无限的 PID 列表,我最终需要将其返回到我的主代码(现在设置为 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 数组。二维数组中的每个元素都需要创建一个一维数组。您已经使用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

简短的回答,您需要定义数组的第二个维度

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 回答