Упаковка программы 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.

0 ответов

Другие вопросы по тегам