java.util.concurrent.CompletionException:java.lang.NoClassDefFoundError:org / json / JSONArray

问题描述 投票:0回答:1

因此,我试图访问json文件中的数据,并遍历每个项目以分别打印出来,而不是整个json文件,但是我收到以下错误消息。我试图对其进行搜索,但没有任何帮助。顺便说一句,我正在使用Eclipse,并且已导入JSON外部JAR。

这是完整的代码:

import java.net.*;
import java.net.http.*;
import org.json.JSONArray;
import org.json.JSONObject;

public class HTTPreq {

    public HTTPreq() {

    }

    public static void main(String[]args) {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://jsonplaceholder.typicode.com/albums")).build();
        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
              .thenApply(HttpResponse::body)
              .thenApply(HTTPreq::parse)
              .join();

    }

    public static String parse(String responseBody) {
        JSONArray albums = new JSONArray(responseBody); //<-----I get the error here
        for (int i=0;i<albums.length(); i++) {
            JSONObject album = albums.getJSONObject(i);
            int id = album.getInt("id");
            int userId = album.getInt("useId");
            String title = album.getString("title");
            System.out.println(id + " " + userId + " " + title);
        }
        return null;

    }

}

这是错误消息:

Exception in thread "main" java.util.concurrent.CompletionException: java.lang.NoClassDefFoundError: org/json/JSONArray
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:645)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:840)
    at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:479)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.NoClassDefFoundError: org/json/JSONArray
    at HTTPreq.parse(HTTPreq.java:23)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:642)
    ... 9 more
Caused by: java.lang.ClassNotFoundException: org.json.JSONArray
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 11 more
java json httprequest
1个回答
0
投票

问题是由于线程sendAsync,如果您使用client.execute,应该没问题。或client.sync()

© www.soinside.com 2019 - 2024. All rights reserved.