获取异常无法在jxbrowser

时间:2017-02-28 12:54:08

标签: java url jxbrowser

我正在使用jxbrowser,

我想使用browser.saveWebpage下载网址列表

public class Downloader{
public Downloader(String url) {
           System.setProperty("teamdev.license.info", "true");
           LoggerProvider.getChromiumProcessLogger().setLevel(Level.OFF);
           Browser browser = new Browser(BrowserType.LIGHTWEIGHT);

         browser.addLoadListener(new LoadAdapter() {
             @Override
             public void onFinishLoadingFrame(FinishLoadingEvent event) {
                 if (event.isMainFrame()){
                      String filePath = "D:\\Downloads\\index"+System.currentTimeMillis()+".html";
                      String dirPath = "D:\\Downloads\\resources";
                      event.getBrowser().saveWebPage(filePath, dirPath, SavePageType.ONLY_HTML);
                 }
             }
         });
        browser.loadURL(url);
        if(!browser.isLoading())
        {
            browser.stop());
        }
    }


public static void main(String args[])
{
      JxBrowserDemo jxBrowserDemo=null;
        String yourInputFile="D:/file.txt";
        ArrayList<String> lines=getUrls(yourInputFile); //read urls from file 

for(int i=0; i<lines.size(); i++)
        {  
             Thread.sleep(5000);
             jxBrowserDemo=new JxBrowserDemo(lines.get(i));
        }
}   

}

保存页面工作正常,直到特定时间它会抛出此异常

  

主题&#34; main&#34;中的异常java.lang.reflect.InvocationTargetException           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)           at java.lang.reflect.Method.invoke(Unknown Source)           在org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa)   der.java:58)引起:    com.teamdev.jxbrowser.chromium.internal.ipc.IPCException:g失败   et Browser browserChannel 969           在com.teamdev.jxbrowser.chromium.Browser.a(SourceFile:376)           在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:200)           在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:172)           在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:139)           在com.teamdev.jxbrowser.chromium.Browser。(SourceFile:125)           在com.teamdev.jxbrowser.chromium.demo.JxBrowserDemo。(JxBrowserDem   o.java:67)           在com.teamdev.jxbrowser.chromium.demo.JxBrowserDemo.main(JxBrowserDemo。   Java的:143)           ......还有5个

请任何帮助:)

1 个答案:

答案 0 :(得分:1)

&#34;无法获得浏览器browserChannel 969&#34;消息最有可能表示由于某种原因Chromium引擎无法为其创建浏览器实例和打开通道。 Chromium引擎可能对同时创建的浏览器实例数量有一些限制。这些限制可能取决于内存大小,环境配置等。由于您已经创建了968个浏览器实例而未将它们排除,这可能是此异常的原因。 另外请注意您有内存泄漏,因为您为每个URL创建了新的Browser实例,并且在此URL Browser实例处理它的URL之后不调用dispose()方法。

browser.stop();行是不必要的。 在调用saveWebPage()方法之后,您应该等到保存网页并配置浏览器实例。 请看下面的示例代码:

                final int maxWaitingTime = 10000;
                final int sleepTime = 50;
                int currentWaitingTime = 0;
                File indexHTML = new File(filePath);
                File resourcesFolder = new File(dirPath);
                while (!indexHTML.exists() || !resourcesFolder.exists()) {
                    TimeUnit.MILLISECONDS.sleep(sleepTime);
                    currentWaitingTime += sleepTime;
                    if (currentWaitingTime == maxWaitingTime)
                        throw new RuntimeException(new TimeoutException("The web page could not be saved."));
                }
                event.getBrowser().dispose();