JAR-файл иногда запускается, но не работает или вообще не запускается - PullRequest
0 голосов
/ 26 июня 2019

Я создал программу с графическим интерфейсом, которая включает в себя множество вызовов API в Eclipse. Работает совершенно нормально при запуске из Eclipse, НО ...

Я экспортировал свою программу в виде файла JAR, и когда я пытаюсь запустить ее из терминала или двойного щелчка, она выдает ошибку NoClassDefFoundError. Я удостоверился, что все пакеты были отобраны, и был выбран правильный Основной класс, все еще не удача.

Я попытался экспортировать его как файл JAR Runnable, и когда я дважды щелкаю по нему, он запускается и открывает графический интерфейс, но не работает, как предполагалось. Однако, когда я запускаю его из терминала, он работает как задумано. Понятия не имею, почему.

Ошибка из файла JAR, который я получаю в терминале:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Не знаю, как на самом деле решить эту проблему, так как некоторые источники в Интернете говорят, что нужно изменить на моей машине то, что связано с доступом администратора, чего у меня нет, потому что я работаю на ноутбуке компании.

Для файла Runnable JAR мой графический интерфейс работает, как предполагалось, до первого запроса HttpRequest. Я должен запросить токен доступа для oAuth, но мой запрос не выполняется или что-то в этом роде, потому что я получаю нулевой возврат, для которого я проверяю.

Вот код, где это напечатано:

try {
        HttpPost request = new HttpPost(url);

        request.addHeader("Content-Type", "application/json");

        StringEntity params;
        params = new StringEntity("{\"grant_type\": \"authorization_code\","
                            + "\"client_id\": \"\","
                            + "\"client_secret\": \"\","
                            + "\"code\": \"" + code + "\"," + "\"redirect_uri\": \"\"}");
        request.setEntity(params);

        String content = execute(request, client);

        if (content != null) {
            textArea.append("Response received\n\n");
        } else {
            textArea.append("An error occurred. No response received, please restart the process.");
            return;
                    }

Для ясности, программа отлично работает при запуске из Eclipse.

Не совсем уверен, как это исправить, если у кого-то есть идеи, я был бы признателен за вашу помощь:)

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Эта ошибка означает, что библиотека http-клиента org.apache отсутствует в jar. Возможно, вы связали его в своем проекте Eclipse, но не экспортировали в jar.

Вы должны создать выполнимую флягу ("толстую флягу") Это руководство по Eclipse:

  • В меню «Файл» строки меню выберите «Экспорт».
  • Разверните узел Java и выберите Runnable JAR-файл. Нажмите кнопку "Далее.
  • На странице «Спецификация файла работоспособного JAR» выберите Конфигурация запуска «Java-приложения», используемая для создания работоспособного JAR.
  • В поле «Назначение экспорта» введите или нажмите «Обзор», чтобы выберите место для файла JAR.
  • Выберите стратегию обработки библиотеки: Упаковать необходимые библиотеки в сгенерированный JAR

    источник

Если это не поможет, предоставьте скриншоты, как экспортировать этот jar-файл из Eclipse и как связан http-клиент org.apache.

0 голосов
/ 03 июля 2019

Я разобрался с быстрым решением.После экспорта Runnable JAR создайте ярлык.Щелкните правой кнопкой мыши по ярлыку и выберите «Свойства».На вкладке «Ярлыки» найдите цель и измените ее на «C: \ Program Files \ Java \ jdk1.8.0_192 \ bin \ javaw.exe» -jar «C: \ Users \ {user} \ Documents \ program.jar»

Итак, местоположение вашего файла javaw.exe, затем -jar и затем местоположение файла jar.

Затем нажмите «Применить» и закройте окно.Моя программа сработала после этого.

...