Javaの - どのように複数のオブジェクトを作成した後にStackOverflowのを避けるのですか?

fl_sh:

私は現在、ユニのための私の試験プロジェクトに取り組んでいます。タスクは、ボードゲームのルードを作成することです。いくつかのコードを書いて、いくつかのテストを行った後、私はにStackOverflowErrorに走りました。

だからここの構造は、(5クラスが必要不可欠である)である。Main.class GUI.class Game.class Player.class Piece.class

主なmainGUIと呼ばれるタイプのGUIの新しいオブジェクトを作成します。これは、スタートボタンと小さな設定エリアなど、ゲームのためのビジュアルを作成します。

[スタート]ボタンの押しで、タイプのゲームの新しいオブジェクトは、タイププレーヤー(明らかに4人)の4つの新しいオブジェクトを作成する作成されます。

タイプPlayerのオブジェクトを作成する場合は、このタイプはちょうどプレーヤー(Player1、Player2など)の数を述べ引数「nmbr」を取得します。

各プレイヤーは、ボード上の周りに移動する4枚を持っているので、これらの4人の選手のそれぞれのタイプのワンピースの他の4つのオブジェクトを作成します。

[スタート]ボタンを押したときに今、何が起こるべきことはピースがボード上に表示されていること、です。しかし、それは起こりません。代わりに、私は最初Playerオブジェクトの呼び出しにはStackOverflowErrorがあることを、明記にErrorMessageを取得します。

だから私はそのようなJavaとのStackOverflowとスタッフでのオブジェクトの作成の振る舞いに読み取ろうとしました。しかし、私はここを得ることができる唯一の結論は、私が互いに内側にあまりにも多くのオブジェクトを作成したということです。

public class Main {
    public static void main(String[] args){
        Main start = new Main();
        start.activate();
    }

    static GUI mainGui;

    public Main() {
       mainGui = new GUI();

    }

GUIの内部でのJButtonがある。このボタンはタイプのゲームのオブジェクトを作成することによって、ゲームを開始することになっている「提出」。

submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object btn = e.getSource();
                boolean ACTIVE = ((JButton) btn).isEnabled();
                if (ACTIVE) {
                    submit.setVisible(false);
                    cancel.setVisible(true);
                    Game spiel = new Game();
                    spiel.begin();
                }
            }
        });
public class Game {

    public Game() {

    }

    Player player1 = new Player(1);   //this is where the Error occurs
    Player player2 = new Player(2);
    Player player3 = new Player(3);
    Player player4 = new Player(4);
}
etc.
public class Player extends Game {

    private String name;
    private Color color;
    private boolean artiPlayer;
    private int playerNmbr, start, end;
    private int[] startArea, endArea;
    Piece piece1, piece2, piece3, piece4;

    public Player(int nmbr){
        if (nmbr == 1) {    
            System.out.println("1.1");
            piece1 = new Piece(500,175, Color.BLUE, Main.mainGui);
            piece2 = new Piece(550, 175, Color.BLUE, Main.mainGui);
            piece3 = new Piece(500,125, Color.BLUE, Main.mainGui);
            piece4 = new Piece(550, 125, Color.BLUE, Main.mainGui);
            start = 0;
            end = 64;
     }
}

Type Piece => Piece(xPos, yPos, Color, GUI)
//and so on

ここでは、正確なエラーメッセージは次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at spielPackage.Player.<init>(Player.java:18)
    at spielPackage.Game.<init>(Game.java:9)

申し訳ありませんが、コードは少し汚れている場合。私は、javaにかなり新しいですし、これはまだ進行中の作業です。

この時点で、私は、Javaがスロー理由を失っています StackOverflowError

luk2302:

あなたのPlayerすべきではない extend Gameので、PlayerではありませんGame

今、あなたはそれらの一つ一つが異なる「ゲーム」であるとのゲームであり、4人の新しい選手それぞれを作成し、さらに4つのプレーヤーを作成して4人のプレーヤーを作成するゲームを作成して......

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=317705&siteId=1