Java区域。相交(矩形)超出边界

Java区域。相交(矩形)超出边界,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我对编程相当陌生,所以这可能非常明显,但当我运行这部分代码时 public void movePlayer(){ Rectangle playerRect = new Rectangle((int) player.getxPositie(),(int) player.getyPositie()-12,20,35); if(water.intersects(playerRect)){//out of bounds???? player.swim=true;

我对编程相当陌生,所以这可能非常明显,但当我运行这部分代码时

public void movePlayer(){
    Rectangle playerRect = new Rectangle((int) player.getxPositie(),(int) player.getyPositie()-12,20,35);

    if(water.intersects(playerRect)){//out of bounds????
        player.swim=true;
        jump=true;
        if(SplashP == true){
                SplashP=false;
                Splash((int) (player.getxPositie()/5),versnelling*12);
        }else{}

    }else{  player.swim=false;
            SplashP = true;}
        }
...
我得到以下例外,我不知道为什么

Exception in thread "Thread-20" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
    at java.util.Vector.get(Vector.java:748)
    at java.awt.geom.Area.getCachedBounds(Area.java:434)
    at java.awt.geom.Area.intersects(Area.java:606)
    at java.awt.geom.Area.intersects(Area.java:618)
    at Model.movePlayer(Model.java:723)
    at Animator.run(Animator.java:19)
    at java.lang.Thread.run(Thread.java:745)
另一件奇怪的事情是,当水与玩家相交时,else的情况有一半会被触发


PS.区域水是由三角形集合构建的

我认为此相交函数不允许矩形输入。我还建议您确保代码使用一种语言。我碰巧知道你的变量是做什么的,因为我自己也是荷兰人,但为了一致性以及每个人都能阅读你的代码,我建议你用英语制作所有的东西

如果您查看
java.awt.geom.Area.getCachedBounds
第433-434行(请参阅stacktrace),您会发现

private Rectangle2D getCachedBounds() {
    ...
    if (curves.size() > 0) {                 // 433
        Curve c = (Curve) curves.get(0);     // 434
曲线
向量
类型的
区域
的成员。 代码检查
曲线
是否为非空,然后访问第一个元素。 然后,这会引发一个
ArrayIndexOutOfBoundsException
,该异常仅在
曲线
为空时发生


因此,必须有另一个线程来修改中间的
water
对象。

您是否同时在另一个线程中更改
water
?那么为什么不检查数组中是否真的有这么多的元素?@Asakura,因为它是
java.awt.geom.Area
中的内部成员不确定线程是如何执行的工作(因为我有一个线程,我从中调用所有方法,但我仍然有多个线程),但当我现在运行游戏时,验证显示“thread-1”。所以我想是的,你是每次运行代码的这一部分还是偶尔会遇到这个异常?在javadoc中,它说交叉点(矩形)r)我在添加所有三角形后重置了我的区域水。我想这就是问题所在problem@cockadoodledoo可能重置后,区域将
曲线设置为新的空向量。