Получается нормально, но когда я вызываю метод updateChat() в игре, он не отображается

Я знаю, что клиентская часть моей программы получает нормально, потому что когда я system.out.println(message); это показывает сообщение в приглашении cmd. Единственная проблема заключается в том, что когда я вызываю метод для обновления чата на игровом фрейме (в JPanel), сообщение не отображается. Вот несколько фрагментов кода, посмотрите, можете ли вы сказать мне, почему он не будет обновляться.

Клиентский метод получения пакетов:

public void receivePackets(int packetID, String line, int colon) throws IOException{
switch(packetID) {
    case 0: //player sending a message
    String token = line.substring(colon+1);
    chatHandler.updateChat(message);
    System.out.println(message);//this prints out
    break;
    case 1: //player position update
    int comma = line.indexOf(",");
    int playerX = Integer.parseInt(line.substring(colon+1, comma));
    int playerY = Integer.parseInt(line.substring(comma+1));
    break;
}
}

Метод ChatHandler для отправки чата:

public void updateChat(String next) {
allChat[4] = allChat[3];
allChat[3] = allChat[2];
allChat[2] = allChat[1];
allChat[1] = allChat[0];
allChat[0] = next;
     System.out.println(next);//this also prints out
}

Здесь подвох. Я знаю, что нет ничего плохого в методе updateChat, потому что когда я вызываю его из класса ChatHandler, он обновляет чат на JPanel. Он просто по какой-то причине не будет обновлять чат при вызове из класса Client. Я даже пытался использовать этот метод в классе ChatHandler:

public void receiveChat(String message) {
    updateChat(message);
}

Я надеюсь, что вы можете мне помочь. Честно говоря, это должно работать, потому что метод println работает, а метод обновления чата - нет, ну да ладно, мне все равно, пока есть решение.

1 ответ

Если вы получаете сообщение, то это не проблема сокета, а скорее проблема перерисовки. Убедитесь, что вы устанавливаете текст в JComponent, ответственном за его отображение. Затем при необходимости форсируют перекраску.

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