NullPointerException в обработке, Java - PullRequest
0 голосов
/ 29 марта 2011

Я надеюсь, что некоторые из вас знакомы со средой разработки Processing для Java. Я искал сайт, но не смог найти слишком много. Поэтому я должен передавать аргументы командной строки из строкового массива 'args' из

public static void main(String[] args )

... для массивов в функции setup (), чтобы я мог их анализировать и использовать в качестве значений высоты гистограмм, которые должны отображаться в графическом окне. Я не понимаю, почему я получаю ошибку NullPointerException в строке 16 ...

for(int i = 0; i < tempArgs.length; i++) {
    dataArray[i] = Integer.parseInt(tempArgs[i]);
}

..... как я думал, в массиве tempArray должны быть значения, что, похоже, подтверждается оператором System.out.println, который я использовал для проверки этого в конце метода main. Вот весь код, он довольно короткий. Любая помощь будет высоко ценится.

public class Main extends PApplet {
    int[] dataArray ;
    int[] normalizedData;
    String[] tempArgs;

    @Override
    public void setup() {
        /*size(dataArray[2], dataArray[3]);
        smooth();
        background(255);*/
        for(int i = 0; i < tempArgs.length; i++) {
            dataArray[i] = Integer.parseInt(tempArgs[i]);
        }

        int max = dataArray[0];
        for(int i = 0; i < dataArray.length; i++) {
            if(dataArray[i] > max) {
                max = dataArray[i];
            }
        }

        for(int i = 0; i < dataArray.length; i++) {
            normalizedData[i] = (dataArray[i] / max) * (height - 20);
        }

        for(int i = 0; i < normalizedData.length; i++) {
            fill(255,34,65);
            rect(3, 5, 10, normalizedData[i]);
        }

        size(dataArray[2], dataArray[3]);
        smooth();
        background(255);

     }

    public static void main(String[] args) {
        String[] tempArgs = new String[args.length + 2];
        tempArgs[0] = "--bgcolor=#FFFFFF";
        tempArgs[1] = "project1.Main";
        for(int i = 2; i < tempArgs.length; i++) {
            tempArgs[i] = args[i-2];
        }
        System.out.println(tempArgs.length);
          PApplet.main(tempArgs);          
    }
}

Ответы [ 2 ]

4 голосов
/ 29 марта 2011

Вам не хватает создания dataArray.

@Override
public void setup() {
    // add this line
    dataArray = new int[tempArgs.length];

    for(int i = 0; i < tempArgs.length; i++) {
        dataArray[i] = Integer.parseInt(tempArgs[i]);
    }
    ...
}

Кроме того, tempArgs должно быть static, поскольку в main() еще нет экземпляра класса Main,так что только сохранение tempArgs позволит использовать его позже в setup().

public class Main extends PApplet {
    int[] dataArray ;
    int[] normalizedData;
    static String[] tempArgs;

    ...

    public static void main(String[] args) {
        tempArgs = new String[args.length + 2]; // note change in this line!
        ...
    }
}

Возможно, это можно сделать проще, потому что я вижу, что вы передаете tempArgs в PApplet.main(), однако я делаюне знаю, как работает этот апплет.

3 голосов
/ 29 марта 2011

у вас есть 2 отдельных массива tempArgs.

  • Один создается локально в main (), и один правильно печатает
  • другой принадлежит классу и никогда не будетэкземпляр.
...