Java error-message - недопустимый тип 'void' здесь, при вызове метода, который возвращает целое число

Я просматривал различные форумы и сайты, пытаясь выяснить, где я иду не так, но безуспешно.

public void updatePlayerLabels()
{
    if(currPlayer == 0)
        lblP1Name.setText(lblP1Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore()));
    else
        lblP2Name.setText(lblP2Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore()));
}

Кажется, появляется ошибка, когда я вызываю методы getScore() для обоих операторов. Я получаю 2 сообщения типа "void". Вот фрагмент класса игрока.

public Player(int number, String name)
{
    this.number = number;
    this.name = name;
    score = 0;
}

public int getScore()
{
    return score;
}

Насколько я могу судить, я не должен видеть эту ошибку, так как я устанавливаю счетчик 0 в конструкторе и создаю проигрыватели до вызова этого метода.

Также я использую метод getScore() в другом месте кода без каких-либо проблем, я уверен, что это проблемный метод, так как, когда я удаляю его из этих двух строк, ошибка исчезает.

3 ответа

Решение

Ты звонишь lblP1Name.setText() дважды (второй раз с "результатом" вызова lblP1Name.setText())

Так должно быть:

if(currPlayer == 0)
    lblP1Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore());
else
    lblP2Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore());

В этой части:

lblP1Name.setText(lblP1Name.setText(...

Метод setText() получает String и возвращает void, вы пытаетесь установить текст lblP1Name но внутренний lblP1Name.setText вернет пустоту.

Попробуйте это вместо этого:

public void updatePlayerLabels() {
    if (currPlayer == 0)
        lblP1Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore());
    else
        lblP2Name.setText(myPlayers[currPlayer].getName() + " - " + myPlayers[currPlayer].getScore());
}

Ваш код читает

 lblP1Name.setText(lblP1Name.setText(.....));

Внутренний текстовый вызов set вернет пустоту, переданную внешнему вызову. Это вызывает ошибку.

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