Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无头/CLI LibGDX_Java_Libgdx - Fatal编程技术网

Java 无头/CLI LibGDX

Java 无头/CLI LibGDX,java,libgdx,Java,Libgdx,我正在为一个LibGDX驱动的小游戏编写服务器端代码,并且偶然发现了一个问题。每次我尝试使用任何Gdx.files.*方法时,都会遇到NullPointerException 显然这是因为我没有实现ApplicationListener,所以LibGDX还没有初始化 有没有办法以headless/CLI方式初始化LibGDX?我需要能够在服务器端加载TileMap对象 MapLoader(Request request) { TiledMap tmp = new TmxMapLoader

我正在为一个LibGDX驱动的小游戏编写服务器端代码,并且偶然发现了一个问题。每次我尝试使用任何
Gdx.files.*
方法时,都会遇到
NullPointerException

显然这是因为我没有实现ApplicationListener,所以LibGDX还没有初始化

有没有办法以headless/CLI方式初始化LibGDX?我需要能够在服务器端加载TileMap对象

MapLoader(Request request)
{
    TiledMap tmp = new TmxMapLoader().load("maps/" + request.name + ".tmx");
}
线程“Server”java.lang.NullPointerException中的异常位于 com.tester.Example.server.ExampleServer$2.received(MapLoader.java:83) 在com.esotericsoftware.kryonet.Server$1.received(Server.java:60)处 com.esotericsoftware.kryonet.Connection.notifyReceived(Connection.java:246) 位于com.esotericsoftware.kryonet.Server.update(Server.java:202) com.esotericsoftware.kryonet.Server.run(Server.java:350)位于 run(Thread.java:722)


具体来看一下LWJGL后端。LwjglApplication的构造函数初始化所有Gdx.*全局变量,如Gdx.file

如果要从自己的代码调用构造函数中运行的步骤,除了调用initialize(),那么这应该可以满足您的需要。

我不建议在无头环境中使用libGDX,它根本不是设计用来这样使用的,将来当libGDX团队更改框架时,您可能会遇到问题。然而,正如罗德所指出的,完全有可能做到这一点,下面是您将如何着手的一个片段。要初始化Gdx.global文件,您需要在后端包中创建一个类,并自行设置globals:

package com.badlogic.gdx.backends.lwjgl;

import com.badlogic.gdx.Gdx;

public class Headless {
    public static void loadHeadless() {
        LwjglNativesLoader.load();
        Gdx.files = new LwjglFiles();
    }
}
剩下的应该相当简单。只需调用Headless.loadHeadless();开始时,您应该能够使用所需框架的部分内容

如前所述,我不建议这样做,但我还没有找到任何将libgdx与客户机/服务器体系结构结合使用的好解决方案

编辑


不久前(在我最初写下这个答案之后),libgdx添加了一个专门为这种目的而设计的。这是在无头环境中使用libgdx的正确方法,对于使用libgdx创建服务器非常有效。

截至2013年12月23日(),libgdx有一个可用于此目的的工具。

我在无头后端使用TiledMaps时遇到了相关问题。你有没有发现一种在你的服务器上使用地图加载器的方法?