java.lang.StackOverflowError 但我没有循环播放任何内容
java.lang.StackOverflowError but i'm not looping anything
我有两种方法,一种在主 class 中,一种在 class 中,称为 'DeleteWall'。我正在创建每个 class 的实例,以便我可以访问他们的方法。我已经阅读了 Whosebugs 上的所有帖子,但我没有看到我做错了什么......就像我没有循环它来创建一个新实例一样,据我所知 anyway.I '将突出显示导致错误的行,因为 intellij says.I 也只调用一次演示
.哦,方法 'delNode' 在主要 class 中,因此它的实例 'werk'.
//Main class
DeleteWall ok=new DeleteWall(); //error line
public void demo(){
System.out.println("running");
ok.delWalls(30,0,30,30);
System.out.println("didnt stop");
}
//DeleteWall class
public class DeleteWall {
Main werk = new Main(); //error line
public void delWalls(int Sx, int Sy, int Ex, int Ey) {
werk.delNode(Sx, Sy, Ex, Ey);
}
}
错误
您在 Main
中有一个 DeleteWall
的实例,在 DeleteWall
中有一个 Main
的实例。现在,当它尝试创建 Main
class 时,它需要为字段 DeleteWall ok= new DeleteWall();
创建一个 DeleteWall
实例,当它尝试这样做时,它需要创建一个DeleteWall
内字段 Main werk = new Main();
的 Main
实例。然后它返回创建 Main 并且你有你的无限循环。
您的 Main
class 有一个字段 ok
,它是用 DeleteWall
对象初始化的。您的 DeleteWall
class 有一个字段 werk
,它是用 Main
对象初始化的。
因此,当程序启动时 运行,它会实例化 Main
class。由于在实例化class时所有字段都被赋予了默认值,所以这里需要实例化DeleteWall
class,这样才能初始化werk
。实例化DeleteWall
class需要实例化Main
class,这样才能初始化ok
。实例化Main
class需要实例化DeleteWall
class,这样才能初始化werk
。实例化DeleteWall
class需要实例化Main
class,这样才能初始化ok
。实例化Main
class需要实例化DeleteWall
class,这样才能初始化werk
。
...
主要问题减少到
public class Main {
DeleteWall ok = new DeleteWall();
}
和
public class DeleteWall {
Main werk = new Main();
}
如果这些 class 中的任何一个被实例化,则必须创建另一个的实例,这反过来将再次创建第一个的 new 实例,依此类推.
整个设计是奇怪,就像声明每个房子总是包含一辆汽车,而每个汽车总是包含一个房子。
解决问题:让 DeleteWall
接收 Main
的实例,而不是创建一个新实例。一些可能性:
在构造函数中
public class Main {
DeleteWall ok = new DeleteWall(this);
}
////
public class DeleteWall {
Main werk;
public DeleteWall(Main main) {
werk = main;
}
}
调用时
public class Main {
DeleteWall ok = new DeleteWall();
public void demo() {
ok.delWalls(this, 30, 0, 30, 30);
}
}
////
public class DeleteWall {
public void delWalls(Main werk, ...) {
werk.delNodes(...);
}
}
(还有很多其他的可能性,这在很大程度上取决于程序应该做什么,问题是如何建模的,偏好,...)
我有两种方法,一种在主 class 中,一种在 class 中,称为 'DeleteWall'。我正在创建每个 class 的实例,以便我可以访问他们的方法。我已经阅读了 Whosebugs 上的所有帖子,但我没有看到我做错了什么......就像我没有循环它来创建一个新实例一样,据我所知 anyway.I '将突出显示导致错误的行,因为 intellij says.I 也只调用一次演示 .哦,方法 'delNode' 在主要 class 中,因此它的实例 'werk'.
//Main class
DeleteWall ok=new DeleteWall(); //error line
public void demo(){
System.out.println("running");
ok.delWalls(30,0,30,30);
System.out.println("didnt stop");
}
//DeleteWall class
public class DeleteWall {
Main werk = new Main(); //error line
public void delWalls(int Sx, int Sy, int Ex, int Ey) {
werk.delNode(Sx, Sy, Ex, Ey);
}
}
错误
您在 Main
中有一个 DeleteWall
的实例,在 DeleteWall
中有一个 Main
的实例。现在,当它尝试创建 Main
class 时,它需要为字段 DeleteWall ok= new DeleteWall();
创建一个 DeleteWall
实例,当它尝试这样做时,它需要创建一个DeleteWall
内字段 Main werk = new Main();
的 Main
实例。然后它返回创建 Main 并且你有你的无限循环。
您的 Main
class 有一个字段 ok
,它是用 DeleteWall
对象初始化的。您的 DeleteWall
class 有一个字段 werk
,它是用 Main
对象初始化的。
因此,当程序启动时 运行,它会实例化 Main
class。由于在实例化class时所有字段都被赋予了默认值,所以这里需要实例化DeleteWall
class,这样才能初始化werk
。实例化DeleteWall
class需要实例化Main
class,这样才能初始化ok
。实例化Main
class需要实例化DeleteWall
class,这样才能初始化werk
。实例化DeleteWall
class需要实例化Main
class,这样才能初始化ok
。实例化Main
class需要实例化DeleteWall
class,这样才能初始化werk
。
...
主要问题减少到
public class Main {
DeleteWall ok = new DeleteWall();
}
和
public class DeleteWall {
Main werk = new Main();
}
如果这些 class 中的任何一个被实例化,则必须创建另一个的实例,这反过来将再次创建第一个的 new 实例,依此类推. 整个设计是奇怪,就像声明每个房子总是包含一辆汽车,而每个汽车总是包含一个房子。
解决问题:让 DeleteWall
接收 Main
的实例,而不是创建一个新实例。一些可能性:
在构造函数中
public class Main { DeleteWall ok = new DeleteWall(this); } //// public class DeleteWall { Main werk; public DeleteWall(Main main) { werk = main; } }
调用时
public class Main { DeleteWall ok = new DeleteWall(); public void demo() { ok.delWalls(this, 30, 0, 30, 30); } } //// public class DeleteWall { public void delWalls(Main werk, ...) { werk.delNodes(...); } }
(还有很多其他的可能性,这在很大程度上取决于程序应该做什么,问题是如何建模的,偏好,...)