Java - застрял в бесконечном цикле при вызове классов

При попытке запустить программу я попал в бесконечный цикл и не могу вырваться. - Я пытался сделать звонки разных классов частными, но это ничего не изменило.

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 import java.io.FileNotFoundException;


 class Mazes extends JPanel {
     public static void main(String[] args) throws FileNotFoundException {
        new Mazes();
     }

     public Mazes() throws FileNotFoundException {

         JFrame f = new JFrame("Maze");
         f.add(new Board());
         f.setSize(500, 500);
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         f.pack();
         f.setVisible(true);
     }
 }

Доска класс

   class Board extends JPanel {
     Boolean[][] maze = getMaze();
     int row = maze.length;
     private Ball b = new Ball();


    public Boolean[][] getMaze() throws FileNotFoundException {
        Boolean[][] maze = Exercise4.readMaze();
        return maze;
     }

    public Board() throws FileNotFoundException {
        add(b);
    }  

     public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int y = 0; y < row; y++) {
            for (int x = 0; x < row; x++) {

                 if (maze[y][x].equals(false)) {
                     g.setColor(Color.BLACK);
                     g.fillRect(x * 25, y * 25, 120, 120);
                } else {
                    g.setColor(Color.WHITE);
                    g.fillRect(x * 25, y * 25, 120, 120);
                }
             }
         }
         g.setColor(Color.RED);
         g.fillOval((row - 1) * 24 - 5, (row - 1) * 24 - 5, 20, 20);

     }


     @Override
     public Dimension getPreferredSize() {
         return new Dimension(row * 25, row* 25);
    }
}

Бальный класс

class Ball extends JPanel implements ActionListener {

     int x = 25, y = 25, vx = 25, vy = 25, tileX = 0, tileY = 0;
     private Board test = new Board(); // I believe the problem lies here when constructing the new Board, as it recalls the ball in the Board class again.
     Boolean[][] maze = test.getMaze();

        @Override
         protected void paintComponent(Graphics graphics) {
             super.paintComponent(graphics);
             Graphics2D g = (Graphics2D) graphics;
             setBounds(0,0, 25*600,25*600);
             setOpaque(false);
             g.setColor(Color.BLUE);
             g.fillOval(x, y, 20, 20);

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(20, 20);
        }

        public Ball() throws FileNotFoundException {
        addKeyListener(new AL());
             setFocusable(true);

        }
        public void actionPerformed(ActionEvent e) {
            repaint();
        }

        public class AL extends KeyAdapter {
            @Override 
            public void keyPressed(KeyEvent e) {
                int code = e.getKeyCode();
                if (code == KeyEvent.VK_UP) {
                    if (!maze[tileX][tileY].equals(false)) {
                        y -= vy;
                        tileY += 1;
                        repaint();
                }
            }

            public void keyTyped(KeyEvent e) {      }
            public void keyReleased(KeyEvent e) {    }
        }
    }

В основном, я призываю: Основной класс -> Класс доски -> Класс шара (добавляет игрока в лабиринт) -> Класс доски

Я застрял в цикле конструктора и не знаю, как это исправить / изменить.

Я пытаюсь просто вызвать конструктор доски из класса Board в классе Ball: я прокомментировал, где, по моему мнению, проблема возникает.

Я сделал это, пытаясь сослаться на лабиринт (Board) в классе Ball, чтобы сделать столкновения жизнеспособными -> класс Ball без конструктора Board или условий столкновения работает нормально, как шарик на доске.

0 ответов

Другие вопросы по тегам