我创建了一个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运行时,该程序运行良好。
不太确定如何解决此问题,如果有人有任何想法,我将不胜感激:)
答案 0 :(得分:1)
该错误意味着org.apache http-client库不在jar中。可能您已将其链接到Eclipse项目中,但未将其导出到jar中。
您必须创建可运行的jar(“ fat-jar”) 这是Eclipse指南:
选择库处理策略: 将所需的库打包到生成的JAR中
如果这没有帮助,请提供屏幕截图,如何从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文件的位置。
然后单击应用并关闭窗口。那之后我的程序开始工作。