Упаковка программы LibGDX в exe-код с пакером разрывов, который открывает поток URL
В моей программе LibGDX я пытаюсь получить IP-адрес пользователя по https://api.ipify.org/. Когда я запускаю jarfile напрямую, он работает, как и ожидалось, но он ломается, когда я запускаю exe, созданный Packr.
Я скомпилировал jar с JDK 11.0.1 и попытался связать его с JDK 11 и 12. Поскольку JDK 11 и 12 не содержат папку jre, которую ищет Packr, я создал ее вручную и скопировал в нее bin и lib. Это конфиг JSON, который я дал Packr:
{
"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"
}
Этот код запускается в методе 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 напрямую.
РЕДАКТИРОВАТЬ Я попытался использовать методы HTTP LibGDX вместо:
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.