Код:
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 в данном случае это координаты хода противника) я не обращаюсь к серверу, который отвечает не сразу, и таким образом перерисовка происходит только после ответа сервера, хотя находится раньше в коде. В чём может быть проблема?