@pshevnin

Почему не выполняется repaint JPanel java swing?

Код:
public class Game {

    int[][] checkersField;
    boolean isClicked;
    ClickedCell clickedCell;
    ServerCommunication server;
    DrawingPanel panel;

public Game(ServerCommunication server) throws IOException {

        this.panel = panel;
        this.server = server;
        isClicked = false;
        clickedCell = new ClickedCell();
        this.checkersField = server.getStartedField();

    }

public void mouseClick(int x, int y) throws IOException {

        int xCell = x / 75;
        int yCell = y / 75;

        CoordXY mirrorCoord = mirroredCoord(xCell, yCell);

        if (isClicked) {
            List<CoordXY> path = clickedCell.getPotencialPath();

            for (CoordXY coordXY : path) {
                if (coordXY.getX() == mirrorCoord.getX() && coordXY.getY() == mirrorCoord.getY()) {

                    CoordXY endXY = new CoordXY(coordXY.getX(), coordXY.getY());
                    CoordXY startXY = new CoordXY(clickedCell.getCoord().getX(), clickedCell.getCoord().getY());

                    if (coordXY.getDeletedCecker() != null) {
                        deleteChecker(coordXY.getDeletedCecker());
                    }

                    moveChecker(startXY, endXY); 
                    panel.repaint(); // этот repaint не выполняется

                    MoveInf move = server.move(startXY, endXY); 
                    moveChecker(move.from, move.to);
                    server.closeServer();

                    clickedCell = new ClickedCell();
                    isClicked = false;
                    break;

                }
            }
        }
}
   private void moveChecker(CoordXY start, CoordXY end) {

        checkersField[start.getY()][start.getX()] = 0;
        checkersField[end.getY()][end.getX()] = movingSide;
        }
}

Кратко опишу суть кода, пишу игру шашки с онлайном: Метод mouseClick принимает координаты, и проверяет не совпадают ли они с координатами куда можно передвинуть шашку (шашки хранятся в матрице, и отрисовываются из неё в классе JPanel) метод moveChecker принимает координаты откуда и куда нужно передвинуть шашку, и переписывает матрицу. Сразу после этого перерисовывается panel, и поле отрисовывается с новым расположением шашек. Все работает так как задумано, пока, следующей строкой: MoveInf move = server.move(startXY, endXY); (move в данном случае это координаты хода противника) я не обращаюсь к серверу, который отвечает не сразу, и таким образом перерисовка происходит только после ответа сервера, хотя находится раньше в коде. В чём может быть проблема?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы