Java(LibGdx) java.lang.StackOverflowError

175
10 марта 2018, 19:20
public class Tube {
    private int x;
    private int y;
    private Texture t01;
    private Tube[] tubes;  //<----------------
    private Random r;
    public Tube(){
        r= new Random();
        x = 400 ; y = 0;
        t01 = new Texture("tube.png");
        tubes = new Tube[3];   //<------------------------------
        for (int i = 0; i<tubes.length;i++){
            tubes[i] = new Tube();
            tubes[i].x = r.nextInt(10);
            tubes[i].y = r.nextInt(10);
        }
    }
    public void drawTube(SpriteBatch batch){
        for (int i = 0; i<tubes.length;i++) {
            batch.draw(t01, tubes[i].x, tubes[i].y);
        }
    }

Правельно ли я понимают, что нельзя создавать массив обьекта Tube[] в этом же классе Tube. Если да, то почему? Как по другому реализовать это?

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.StackOverflowError
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:133)
Caused by: java.lang.StackOverflowError
    at java.io.InputStream.<init>(InputStream.java:45)
    at java.io.FileInputStream.<init>(FileInputStream.java:123)
    at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:140)
    at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:222)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:146)
    at com.badlogic.gdx.graphics.TextureData$Factory.loadFromFile(TextureData.java:98)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:88)
Answer 1

Вообще можно, есть даже паттерн проектирования "Компоновщик" который основан на этом.
Вам нужно добавлять элементы динамически когда это нужно, а не при создании нового экземпляра. Иначе у вас при создании экземпляра создается еще 3 таких, в которых тоже самое еще раз три по три, 3*3*3*3*3... в итоге бесконечность. Нужно ограничить создание новых экземпляров, либо добавлять их вне конструкторов

READ ALSO
Подключение EJB к проекту в Intelij Idea

Подключение EJB к проекту в Intelij Idea

Выполняю такой код из книги "Изучаем Java EE"

192
Intellij IDEA не открывается [требует правки]

Intellij IDEA не открывается [требует правки]

Intellij IDEA вообще не запускается: нажав на ярлык, ничего не происходиНикаких сообщений или ошибок нет, просто ничего, совершенно ничего не происходит

229
Выделение памяти в Java

Выделение памяти в Java

Помогите разобраться, что происходит во время выполнения этих строк:

170
Работа с JavaFX и ее потоком

Работа с JavaFX и ее потоком

У меня есть JavaFX приложение со своим потоком и еще несколько других потоковМне нужно решить проблему с тем, что из этих потоков нельзя работать...

161