Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何防止主线程执行下一行直到最后一行完全执行_Java_Multithreading_Spring Boot - Fatal编程技术网

Java 如何防止主线程执行下一行直到最后一行完全执行

Java 如何防止主线程执行下一行直到最后一行完全执行,java,multithreading,spring-boot,Java,Multithreading,Spring Boot,首先,我对弹簧靴还不熟悉。我想抓取一个新闻网站,以便制作一个RESTAPI。 我所做的只是创建一个路由,负责在抓取新闻网站后为最新新闻创建json响应。 这是路线 @GetMapping("/latest") public ArrayList<Result> scrape() { String title = ""; Document doc; Element body

首先,我对弹簧靴还不熟悉。我想抓取一个新闻网站,以便制作一个RESTAPI。 我所做的只是创建一个路由,负责在抓取新闻网站后为最新新闻创建json响应。 这是路线

@GetMapping("/latest")
    public ArrayList<Result> scrape() {
        
        String title = "";
        Document doc;
        Element body ;
        ArrayList<Element> elements = new ArrayList<>() ;
        
        ArrayList<Result> results = new ArrayList<>();
        
        ArrayList<Element>li;
        
        try {
            
            doc = Jsoup.connect("https://timesofindia.indiatimes.com").get(); //error take place here
            
            title = doc.title();
            
            body = doc.body();
            
            elements = body.getElementsByAttributeValue("data-vr-zone","latest");
            System.out.println("Size "+elements.size());
        
            li = elements.get(0).select("li > a");
        
            System.out.println("WHole Data "+li.toString());
        
            System.out.println(li.size());
        
        int id = 0;
        
        for(Element text : li ) {
            
            id++;
                        
            String link  = "";
            
            if( text.attr("href") != ""  &&  text.attr("title") != "" ) {
                link = "https://timesofindia.indiatimes.com/" + text.attr("href") ;
                results.add(new Result(id,text.attr("title"),link));
            }       
        }

        } catch (IOException e) {
            
            e.printStackTrace();    
        }
        
        return results;
    }
@GetMapping(“/latest”)
公共ArrayList scrap(){
字符串标题=”;
文件文件;
元素体;
ArrayList元素=新的ArrayList();
ArrayList结果=新建ArrayList();
ArrayListli;
试一试{
doc=Jsoup.connect(“https://timesofindia.indiatimes.com“”.get();//此处发生错误
title=doc.title();
body=doc.body();
elements=body.getElementsByAttributeValue(“数据虚拟区域”、“最新”);
System.out.println(“Size”+elements.Size());
li=elements.get(0)。选择(“li>a”);
System.out.println(“整个数据”+li.toString());
System.out.println(li.size());
int id=0;
用于(元素文本:li){
id++;
字符串链接=”;
if(text.attr(“href”)!=“”&text.attr(“title”)!=“”){
链接=”https://timesofindia.indiatimes.com/“+text.attr(“href”);
add(新结果(id,text.attr(“title”),link));
}       
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回结果;
}
请有人帮助如何在java中处理这种情况

因为
Jsoup.connect()

[这是输出][1] [1]: https://i.stack.imgur.com/HubJD.png

堆栈跟踪:

2020-03-04T12:18:34.410009+00:00 heroku[路由器]:at=info method=GET path=“/latest”host=morning-waters-01018.herokuapp.com请求\u id=15a8fdba-e541-4aa2-a0df-34838b2e5f fwd=“47.30.171.180”dyno=web.1 connect=0ms服务=177ms状态=500字节=473协议=https 2020-03-04T12:18:34.399950+00:00应用程序[web.1]:尺寸0 2020-03-04T12:18:34.402793+00:00应用程序[web.1]:2020-03-04 12:18:34.402错误4---[io-17255-exec-5]o.a.c.c.c.[/].[dispatcherServlet]:路径[]上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IndexOutOfBoundsException:索引:0,大小:0]根本原因 2020-03-04T12:18:34.402794+00:00应用程序[web.1]: 2020-03-04T12:18:34.402795+00:00应用程序[web.1]:java.lang.IndexOutOfBoundsException:索引:0,大小:0 2020-03-04T12:18:34.402796+00:00应用程序[web.1]:在java.util.ArrayList.rangeCheck(ArrayList.java:657)~[na:1.8.0_242-heroku] 2020-03-04T12:18:34.402797+00:00应用程序[web.1]:在java.util.ArrayList.get(ArrayList.java:433)~[na:1.8.0_242-heroku]


我认为
Jsoup.connect(“https://timesofindia.indiatimes.com“”。get()
执行同步调用

您只需要找到错误的原因

最简单的方法

请将
catch(IOException e)
更改为
catch(Exception e)

main()
方法添加到同一源文件中,在
main()
中复制
scrape()
的主体,并在IDE中运行
main()
方法。您只需打印
结果(不返回它们)

您可以尝试在
main()
方法中调试代码

原因似乎是

elements=body.getElementsByAttributeValue(“数据虚拟区域”、“最新”)


元素
在这里是空的

我认为
Jsoup.connect(“https://timesofindia.indiatimes.com“”。get()
执行同步调用

您只需要找到错误的原因

最简单的方法

请将
catch(IOException e)
更改为
catch(Exception e)

main()
方法添加到同一源文件中,在
main()
中复制
scrape()
的主体,并在IDE中运行
main()
方法。您只需打印
结果(不返回它们)

您可以尝试在
main()
方法中调试代码

原因似乎是

elements=body.getElementsByAttributeValue(“数据虚拟区域”、“最新”)


元素
此处为空

能否发布stacktrace?stacktrace显示IndexOutOfBoundsException能否发布stacktrace?stacktrace显示IndexOutOfBoundsException