尝试重绘时“数组索引超出范围:1”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试重绘时“数组索引超出范围:1”相关的知识,希望对你有一定的参考价值。
我正在尝试在java中绘制自由格式行,但我得到一个超出范围的数组索引:1错误,我无法弄清楚为什么。似乎在调用repaint()方法期间发生了这种情况。我的矢量有问题吗?我添加Point对象的方式?(看起来我可能没有在向量中添加任何东西?)。
private int iterationDeLigne = 0;
private Vector<Point> locationDepart = new Vector<Point>();
private Vector<Point> locationArrivee = new Vector<Point>();
private class EcouteurDessin implements MouseListener
@Override
public void mouseClicked(MouseEvent e)
@Override
public void mouseEntered(MouseEvent e)
@Override
public void mouseExited(MouseEvent e)
@Override
public void mousePressed(MouseEvent e)
MouseIsPressed = true;
locationDepart.add(e.getPoint());
@Override
public void mouseReleased(MouseEvent e)
private class EcouteurMouvement implements MouseMotionListener
@Override
public void mouseDragged(MouseEvent e)
locationArrivee.add(e.getPoint());
repaint();
@Override
public void mouseMoved(MouseEvent e)
private class Panel_Graphique extends JPanel
@Override
protected void paintComponent(Graphics g)
//switch()
g.setColor(Color.BLACK);
if(MouseIsPressed == true)
g.drawLine((int)locationDepart.get(iterationDeLigne).getX(), (int)locationDepart.get(iterationDeLigne).getY(),
(int)locationArrivee.get(iterationDeLigne).getX(), (int)locationArrivee.get(iterationDeLigne).getY());
iterationDeLigne++;
答案
似乎在调用repaint()方法期间发生了这种情况
iterationDeLigne++;
绘画方法仅用于绘画。您不应该在绘制方法中更改类的属性,因为您无法控制Swing重绘组件的时间或频率。
我真的不知道你想要做什么,但一般来说paintComponent()方法应该:
- 调用super.paintComponent(...)作为清除背景的第一个语句
- 迭代您的ArrayList以重新绘制列表中的所有Points。
此外,在问这样的问题之前,先做一些基本的调试,并告诉我们导致问题的确切陈述。异常跟踪将告诉您导致问题的语句的行号。
帮助您调试,而不是使用如下代码:
g.drawLine((int)locationDepart.get(iterationDeLigne).getX(), (int)locationDepart.get(iterationDeLigne).getY(), (int)locationArrivee.get(iterationDeLigne).getX(), (int)locationArrivee.get(iterationDeLigne).getY());
上述代码不仅不适合单行,您无法分辨语句中的问题所在。
因此,将代码简化为:
Point depart = locationDepart.get( iterationDeLigne );
Point arrivee = locationArrivee.get( iterationDeLigne );
g.drawLine(depart.x, depart.y, arrive.x, arrive,y);
现在,当您访问ArrayLists或drawLine(..)方法时,您将知道问题是否存在。它更容易调试,因为您也可以显示每个变量的值。
以上是关于尝试重绘时“数组索引超出范围:1”的主要内容,如果未能解决你的问题,请参考以下文章