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 или условий столкновения работает нормально, как шарик на доске.