2017-02-28 5 views
0

にブラウザのブラウザチャンネルを取得できませんでしたガイド私はbrowser.saveWebpage例外がjxbrowser

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)); 
     } 
} 

}

ページを保存正常に動作を使用したURLのリストをダウンロードしたい、

をjxbrowserを使用して」います特定の時刻までこの例外がスローされる

例外のスレッド"main" java.lang。 java.lang.reflectでのsun.reflect.DelegatingMethodAccessorImpl.invoke(不明なソース) でsun.reflect.NativeMethodAccessorImpl.invoke(不明なソース) でsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) でreflect.InvocationTargetException com.teamdev.jxbrowser.chromium.internal.ipc.IPCException:によって引き起こさorg.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa der.java:58)で.Method.invoke(不明なソース) :失敗しました ブラウザブラウザチャンネル969 com.teamdev.jxbrowser.chromium.Browser.a(SourceFile:376) com.teamdev.jxbrowser.chromium.Browser(S ourceFile:200) com.teamdev.jxbrowser.chromium.Browser(SourceFile:172) at com.teamdev.jxbrowser.chromium.Browser(SourceFile:139) at com.teamdev.jxbrowser.chromium.Browser。 (SOURCEFILE:125)com.teamdev.jxbrowser.chromium.demo.JxBrowserDemo.mainでcom.teamdev.jxbrowser.chromium.demo.JxBrowserDemo(JxBrowserDem o.java:67)で (JxBrowserDemo。 のjava:143) ... 5もっと

任意のヘルプ:)

答えて

1

がメッセージ最も可能性の高いいくつかの理由でクロムエンジンは、ブラウザのインス​​タンスを作成するために失敗したことを示し、「ブラウザbrowserChannel 969が取得できませんでした」してくださいとそれのためのオープンチャネル。 Chromiumエンジンには、同時に作成されたブラウザインスタンスの数にいくつかの制限があります。これらの制限は、メモリサイズや環境設定などに依存する可能性があります。すでに968個のブラウザインスタンスを作成せずに作成しているので、この例外の原因になる可能性があります。 また、URLごとに新しいBrowserインスタンスを作成し、このURL BrowserインスタンスがURLを処理した後にdispose()メソッドを呼び出さないため、メモリリークが発生することに注意してください。

browser.stop();行は不要です。 saveWebPage()メソッドを呼び出した直後に、Webページが保存されブラウザインスタンスが破棄されるまで待つ必要があります。あなたの速い応答のための

   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(); 
+0

おかげで、私はすべてで作成されたブラウザを停止するbrowser.stopを追加しました: は、以下のサンプルコードを見てみてください。 – Elsayed

+1

stop()メソッドのドキュメントによると、このメソッドは保留中のナビゲーションまたはダウンロード操作をキャンセルし、背景音やアニメーションなどの動的ページ要素をすべて停止します。 このメソッドはブラウザオブジェクトを処理しません。このメソッドは、ブラウザオブジェクトを破棄するまでメモリに存在します。これによりメモリリークが発生します。 不要になったらブラウザインスタンスを破棄する必要があります。 –

+0

上記のプログラムを適切に実行するには、コードのどの変更を行う必要がありますか? – Elsayed