JAR文件有时可以运行,但是不起作用,或者根本不运行

时间:2019-06-26 14:22:30

标签: java eclipse jar

我创建了一个GUI程序,其中涉及在Eclipse中进行许多API调用。从Eclipse,BUT运行时,效果完全正常。

我将程序导出为JAR文件,并且尝试从终端或双击运行该程序时,将引发NoClassDefFoundError。我确保选择了所有软件包,并选择了正确的Main-Class,仍然没有运气。

我尝试将其导出为可运行的JAR文件,当我双击它时,它会运行并打开GUI,但无法正常工作。但是,当我从终端运行它时,它可以按预期工作。我不知道为什么。

我在终端中收到的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文件,我的GUI可以按预期工作,直到第一个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 个答案:

答案 0 :(得分:1)

该错误意味着org.apache http-client库不在jar中。可能您已将其链接到Eclipse项目中,但未将其导出到jar中。

您必须创建可运行的jar(“ fat-jar”) 这是Eclipse指南:

  • 从菜单栏的“文件”菜单中,选择“导出”。
  • 展开Java节点,然后选择Runnable JAR文件。点击下一步。
  • 在“可运行的JAR文件规范”页面中,选择一个 “ Java应用程序”启动配置,用于创建可运行文件 JAR。
  • 在“导出目标”字段中,键入或单击“浏览到”。 选择JAR文件的位置。
  • 选择库处理策略: 将所需的库打包到生成的JAR中

    source

如果这没有帮助,请提供屏幕截图,如何从Eclipse导出此jar以及如何链接org.apache http-client。

答案 1 :(得分:0)

我想出了一个快速解决方案。导出Runnable JAR之后,创建一个快捷方式。右键单击快捷方式,然后选择“属性”。 在“快捷方式”选项卡下,查找目标并将其更改为“ C:\ Program Files \ Java \ jdk1.8.0_192 \ bin \ javaw.exe” -jar“ C:\ Users \ {user} \ Documents \ program.jar”

因此,您的javaw.exe文件的位置,然后是-jar,然后是jar文件的位置。

然后单击应用并关闭窗口。那之后我的程序开始工作。