当前位置: 代码迷 >> java >> Java处理中的NullPointerException
  详细解决方案

Java处理中的NullPointerException

热度:128   发布时间:2023-07-27 09:48:51.0

我希望你们中的一些人熟悉Java的Processing开发环境。 我已经搜索了该站点,但是找不到太多。 所以我应该从'args'字符串数组传递命令行参数

public static void main(String[] args )

...到setup()函数中的数组,以便我可以解析它们并将它们用作要在图形窗口上绘制的条形图高度的值。 我不明白为什么我在第16行总是收到NullPointerException错误...

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

.....我以为tempArray数组中应该有值,这似乎是我用来在main方法末尾测试的System.out.println语句所提供的。 这是整个代码,很短。 任何帮助将非常感激。

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);          
    }
}

您缺少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() ,但是我不知道此applet框架如何工作。

您有2个单独的tempArgs数组。

  • 一种是在main()中本地创建的,另一种是正确打印的
  • 另一个属于该类,并且从未实例化。
  相关解决方案