【问题标题】:Adding new object by pressing left mouse按鼠标左键添加新对象
【发布时间】:2021-01-13 03:48:45
【问题描述】:

得到了一个Object 实例(Sprites)的数组,得到了通过按鼠标左键向数组添加新对象的方法:

private void addSprite() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                Sprite sprite = new Ball(x, y);
                if (sprites[sprites.length - 1] == null){
                    sprites[sprites.length - 1] = sprite;
                }else if (sprites[sprites.length - 1] != null){
                    Sprite[] temp = new Sprite[sprites.length * 2];
                    System.arraycopy(sprites, 0, temp, 0, sprites.length);
                    sprites = temp;
                }

            }
        });
    }

如果arr 已满,我将创建新的临时数组,大小为sprites.length * 2,并复制temporary array 中的所有元素,并更改链接sprites = temp,我得到NullPointerException。任务仅使用数组添加新对象,而不是 ArrayList

我做错了什么?

【问题讨论】:

标签: java arrays swing nullpointerexception


【解决方案1】:

像这样工作:

   private void addSprite() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                Sprite sprite = new Ball(x, y);
                if (sprites[count] == null){
                    sprites[count] = sprite;
                    count++;
                }else if (sprites[count] != null){
                    Sprite[] temp = new Sprite[sprites.length + 1];
                    System.arraycopy(sprites, 0, temp, 0, sprites.length);
                    temp[sprites.length] = sprite;
                    sprites = temp;
                }
            }
        });
    }

如果创建数组大小:sprites.length * 2: 问题是java尝试updaterendernull元素array 如果创建 sprites.length + 1 并添加最后一个 index 元素,则数组中没有 null 元素,它可以正常工作。

【讨论】:

  • 不要使用数组。而是使用ArrayList。它为您进行尺寸管理。换句话说,“不要重新发明轮子”。
  • 尝试更新和呈现空元素的不是“java”,而是您的代码。只要记住数组将包含空元素,将数组大小加倍就可以了。
猜你喜欢
  • 2017-01-21
  • 2011-04-26
  • 2011-02-28
  • 1970-01-01
  • 2011-06-17
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多