private void restartPlayer2GameTimer() { stopPlayer2GameTimer(); player2GameTimer = new Timer(true); player2GameTimer.schedule( new TimerTask() { @Override public void run() { synchronized (GameControllerServer.this) { if (gamePaused || !gameStarted) { return; } try { if (board.getTetrisModel().getFigure2().pushDown() == AbstractFigure.RESULT_FREEZED) { updatePlayer2ScoreViewer(board.getTetrisModel().removeRows()); board.getTetrisModel().getFigureManager2().pregenerateFigure(); /* * Put preview figure */ board.getPlayer2PreviewerModel().clear(); board .getTetrisModel() .getFigureManager2() .getNextFigure() .putFigure(board.getPlayer2PreviewerModel(), 4, 0); repaintPlayer2Previewer(); /* * Put new figure */ final AbstractFigure figure = board.getTetrisModel().getFigureManager2().getCurrentFigure(); board.getTetrisModel().setFigure2(figure); if (!figure.putFigure(board.getTetrisModel(), 14, 0)) { gameOver(); } else { board.getDownShifter().doShift(); networkManager.sendCommand(DoShiftCommand.class); } } repaintDownShifter(); } catch (IOException e) { interraptGame(e); } } } }, player2ScoreCounter.getSpeed(), player2ScoreCounter.getSpeed()); }