在我的 LibGDX 程序中,我尝试从https://api.ipify.org获取用户的 IP 。当我直接运行 jarfile 时,它按预期工作,但是当我运行 Packr 生成的 exe 时它会中断。
我用 JDK 11.0.1 编译了 jar,并尝试将它与 JDK 11 和 12 捆绑在一起。因为 JDK 11 和 12 不包含 Packr 查找的 jre 文件夹,所以我手动创建了它并将 bin 和 lib 复制到其中。这是我给 Packr 的配置 json:
{
"platform": "windows64",
"jdk": "C:\\Program Files\\Java\\jdk-12",
"executable": "ShengJi-win64",
"classpath": [
"desktop-1.0.jar"
],
"removelibs": [
"desktop-1.0.jar"
],
"mainclass": "com.sage.shengji.desktop.DesktopLauncher",
"minimizejre": "soft",
"output": "out-windows64"
}
此代码在我的 Screen 的 show() 方法中运行。
try {
System.out.println("In beginning of try");
String thisMachineIP =
new BufferedReader(
new InputStreamReader(
new URL("https://api.ipify.org").openStream())).readLine();
System.out.println("Retrieved this machine IP");
} catch(IOException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
当我运行 exe 并打印到日志文件时,它只打印“尝试开始时”并且窗口关闭。它不会因“程序已停止工作”而崩溃;窗口只是关闭,没有任何解释。日志文件不包含任何一个捕获的打印。当我直接运行 jarfile 时,一切都按预期工作。
编辑我尝试改用 LibGDX 的 HTTP 方法:
Net.HttpRequest httpGet = new Net.HttpRequest(Net.HttpMethods.GET);
System.out.println("After httpGet object creation");
httpGet.setUrl("https://api.ipify.org");
System.out.println("After set httpGet url");
Gdx.net.sendHttpRequest(httpGet, new Net.HttpResponseListener() {
@Override
public void handleHttpResponse(Net.HttpResponse httpResponse) {
System.out.println("in handleHttpResponse()");
}
@Override
public void failed(Throwable t) {
System.out.println("in failed()");
}
@Override
public void cancelled() {
System.out.println("in cancelled()");
}
});
System.out.println("After Gdx.net.sendHttpRequest()");
再一次,jarfile 本身运行良好。exe 从不打印“After Gdx.net.sendHttpRequest()”,也不会打印 HttpResponseListener 中的任何消息。