libGDX:当我呼叫服务器主机时冻结我的游戏

时间:2017-04-24 02:14:49

标签: java libgdx apache-commons-net

我想像其他游戏一样创建每日奖金,所以我从commons-net-3.6打电话给Apache图书馆,以便从互联网获取当前时间。然后我写了这段代码:

NTPUDPClient timeClient = new NTPUDPClient();
String TIME_SERVER = "time-a.nist.gov";
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime();
Date time = new Date(returnTime);
System.out.println(time);

但是,有时工作正常,有时候无法正常工作并冻结我的游戏(没有回应),为什么?

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

您是否在单独的线程上调用此代码?

这不能在libgdx渲染线程上完成,必须在一秒钟内调用至少60次。向服务器发出请求非常耗时,并且会阻塞线程,直到完成为止。如果请求不是异步的,则必须在单独的Thread上运行它。

最简单的方法(但不是最好的方法)是做这样的事情

new Thread() {
    public void run(){
       //Here you need to do the request
    }
}.start();

您可以在此处找到更多信息 https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html