2016-04-30 3 views
0

Я пытаюсь запустить сервер LibGDX. Я скопировал код с этого сайта: https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/net/PingPongSocketExample.java, но я получаю исключение нулевого указателя из строки Server server = Gdx.net.newServerSocket ... Что происходит?LibGDX: newServerSocket вызывает исключение нулевого указателя

+1

Можете ли вы опубликовать точное исключение и версию LibGDX? 'AndroidNet' никогда не возвращает null из метода, который вы опубликовали. Вы уверены, что вы вызываете его после того, как приложение уже запущено? – JustACluelessNewbie

+0

А, есть проблема, я вообще не запускаю приложение ...: P имеет смысл. – TAsk

+1

'Gdx.net' является нулевым, если вы не запускаете приложение - если вы просто хотите использовать сетевые функции, попробуйте создать объект реализации« Net »вручную, например:' new LwjglNet(). NewServerSocket (...) '. – JustACluelessNewbie

ответ

2

Статические переменные утилиты LibGDX, как и почти любые переменные Java, начинаются с null. Они не назначаются сразу (и не являются окончательными) для поддержки различных реализаций на каждой платформе. Например, реализация Net, которую вы указываете с помощью Gdx.net, составляет null, если вы не запускаете приложение, которое фактически присваивает это значение.

Если вы хотите, чтобы сервер был частью вашего обычного клиентского приложения, сначала попробуйте запустить приложение и , затем, создавая серверный сокет. Если вы хотите использовать отдельное серверное приложение, попробуйте headless бэкэнд. Вы также можете создать экземпляр Net вручную, например: new HeadlessNet().newServerSocket(...) или new AndroidNet().newServerSocket(...).

Net Реализации в основном простые фабрики без гражданства на большинстве платформ, поэтому все в порядке, чтобы иметь несколько примеров из них; даже если вы создаете экземпляр Net вручную и , то создайте приложение, это не вызовет проблем.

+0

Спасибо, это имеет смысл! Однако сейчас у меня другая проблема. В моем классе сервера я не могу импортировать LwjglNet. При попытке запустить Gradle говорит, что пакет com.badlogic.gdx.backends.lwjgl не существует. Однако, если я попытаюсь импортировать его в другой класс, он отлично работает. Я подозреваю, что есть проблема с конфигурацией сборки.? – TAsk

+0

Возможно, вы пытаетесь импортировать этот класс в проект «core». Core имеет только, ну, основные зависимости: абстракции, используемые другими платформами. 'LwjglNet' - это класс, специфичный для настольной платформы. Основной проект просто не имеет этой зависимости - я бы предложил создать отдельный проект с помощью '' gdx-backend-headless' '(http://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-backend-headless) если вы хотите использовать серверное приложение. – JustACluelessNewbie

+0

Существует несколько способов решения проблемы NPE, было бы полезно узнать, чего вы пытаетесь достичь. Если создание сокета сервера является частью почти любого клиентского приложения, вы можете просто подождать, пока приложение будет полностью создано, и используйте «Gdx.net» для межплатформенного API. Если вам нужен отдельный «глобальный» сервер, попробуйте использовать обезглавленные бэкэнды. – JustACluelessNewbie

Смежные вопросы