2016-04-30 18 views
0

LibGDXサーバーを起動しようとしています。私はこのサイトからコードをコピーしました:https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/net/PingPongSocketExample.javaしかし、私はラインサーバーサーバー= Gdx.net.newServerSocket ... nullポインタ例外を取得しています...何が起こっているのですか?LibGDX:newServerSocketによりnullポインタ例外が発生する

+1

正確な例外とLibGDXのバージョンを投稿できますか? 'AndroidNet'はあなたが投稿したメソッドからnullを返すことはありません。アプリケーションが既に起動しているので、起動してもよろしいですか? – JustACluelessNewbie

+0

ああ、問題がある、私は全くアプリケーションを始めていない...:P意味をなさない。 – TAsk

+1

'Gdx.net'はアプリケーションを起動しない限りヌルです。単にネットワーキング機能を使いたいのであれば、' new LwjglNet()。newServerSocket(...) 'のように' Net'実装オブジェクトを手作業で作成してみてください。 – JustACluelessNewbie

答えて

2

静的ユーティリティ変数LibGDXは、ほとんどすべてのJava変数と同様に、nullとして開始します。これらは、各プラットフォームで異なる実装をサポートするためにすぐに割り当てられるわけではありません(最終的なものでもありません)。たとえば、実際にこの値を割り当てるアプリケーションを起動しない限り、Gdx.netで参照するNetの実装はnullです。

通常のクライアントアプリケーションの一部としてサーバーを使用する場合は、アプリケーションを最初に起動してから、と入力してからサーバーソケットを作成してみてください。別のサーバーアプリケーションが必要な場合は、headlessバックエンドを試してみてください。手動でNetインスタンスを作成することもできます(例:new HeadlessNet().newServerSocket(...)またはnew AndroidNet().newServerSocket(...))。

Netほとんどのプラットフォームでは、実装は基本的に単純なステートレスなファクトリです。そのため、いくつかのインスタンスを用意しても問題ありません。手動でNetインスタンスを作成し、を次に作成してもを作成しても問題はありません。

+0

ありがとう、これは理にかなっています!しかし、今私は別の問題を抱えています。私のサーバークラスでは、LwjglNetをインポートできません。実行しようとすると、Gradleはパッケージcom.badlogic.gdx.backends.lwjglが存在しないと言います。ただし、別のクラスでインポートしようとすると、正常に動作します。ビルドの設定に問題があると思われます。 – TAsk

+0

おそらくこのクラスを 'core'プロジェクトにインポートしようとしています。コアには、他のプラットフォームで使用されていた抽象的な依存性だけがあります。 'LwjglNet'はデスクトッププラットフォーム特有のクラスです。コアプロジェクトにはこの依存関係はありません。['gdx-backend-headless'](http://mvnrepository.com/artifact/com.badlogicgames.gdx/gdx-backend-headless)と別のプロジェクトを作ることをお勧めします。サーバーアプリケーションが必要な場合 – JustACluelessNewbie

+0

NPEの問題を解決するにはいくつかの方法がありますが、達成しようとしていることを知ることは役に立ちます。サーバーソケットの作成がクライアントアプリケーションのほとんどすべての場合、アプリケーションが完全に作成されるまで待つだけで、クロスプラットフォームAPIには 'Gdx.net'を使用することができます。別の "グローバル"サーバが必要な場合は、ヘッドレスバックエンドを試してください。 – JustACluelessNewbie

関連する問題