2

適切なパスと設定を使用して、Swing ベースのアプリケーションに Xulrunner ベースの SWT ブラウザを埋め込んでいますSWT.MOZILLA。主に、拡張するクラスがありますJPanel。このクラスは、内部に Browser ウィジェットを含むシェルを埋め込みます。クラス Java VM のインスタンスを 1 つ以上作成すると、アプリケーション全体がクラッシュして終了します。SWT.NONE(つまり、基本的にシステムのブラウザーを選択して)でブラウザーを作成すると、アプリケーションで必要な数のブラウザーを表示できます。問題はどこにありますか?

ところでnsCycleCollector.c、VM をクラッシュさせるのは (xulrunner の一部) です。

4

2 に答える 2

0

SWT / AWT(Swing) ブリッジを自分でプログラムするのは難しいです。私は現在そのためにDJNativeを使用していますが、完璧に機能します。ぜひお試しください ;)

SWT Browser 用の独自の XULRunner インストール

  1. まず、mozilla から xulrunner ランタイムをダウンロードします。
  2. 任意の場所に展開し、アプリケーションのブートストラップ中にパスを覚えておいてください
  3. org.eclipse.swt.browser.XULRunnerPath xulrunner インストールへのパスを使用して、次のシステム プロパティを設定します。

このアプローチを使用すると、定義済みの xulrunner インストールをアプリと共に出荷できます。

于 2013-01-13T13:10:54.537 に答える
0

ここで同じクラッシュ状況が発生します。

xulrunner 10.0.4esr を使用すると、JVM が異常終了する前に、次の System.err 出力が得られます。

###!!! ABORT: Main-thread-only object used off the main thread: file e:/builds/moz2_slave/rel-m-esr10-xr-w32-bld/build/xpcom/base/nsCycleCollector.cpp, line 1278

クリーンアップするには、nsIWebBrowser インスタンスの nsIBaseWindow を破棄する必要があることがわかりました。

nsIWebBrowser webBrowser = (nsIWebBrowser)b.getWebBrowser();
nsIBaseWindow baseWindow = (nsIBaseWindow)webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);
baseWindow.destroy();

その後、Mozilla / xul を含む SWT Browser の新しいインスタンスを作成できます。

問題は、nsInterfaces にもうアクセスできないことです (Browser.getWebBrowser() が null を返すため)。

xulrunner 10 または 24 で、その nsIBaseWindow オブジェクトにプログラムでアクセスする方法はありますか?

以下は、クラッシュ ログ (xulrunner 24 および JDK6 ランタイムで生成されたもの) の抜粋です。

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [xul.dll+0xaa1b4c]  NS_CycleCollectorSuspect2+0xc
C  [xul.dll+0x6d45d1]  xpc_ActivateDebugMode+0x1a588
C  [xul.dll+0x6d1192]  xpc_ActivateDebugMode+0x17149
C  [xul.dll+0xa74003]  JSD_GetValueForObject+0x2b8625
C  [xul.dll+0xa72ffa]  JSD_GetValueForObject+0x2b761c
C  [xul.dll+0x70fdae]  xpc_ActivateDebugMode+0x55d65
C  [xul.dll+0x711bc6]  xpc_ActivateDebugMode+0x57b7d
C  [swt-xulrunner-win32-4426.dll+0x11d6]  Java_org_eclipse_swt_internal_mozilla_XPCOM__1VtblCall__II+0xe
j  org.eclipse.swt.internal.mozilla.XPCOM.VtblCall(II)I+9
j  org.eclipse.swt.internal.mozilla.nsIBaseWindow.Create()I+9
j  org.eclipse.swt.browser.MozillaDelegate.createBaseWindow(Lorg/eclipse/swt/internal/mozilla/nsIBaseWindow;)I+1
j  org.eclipse.swt.browser.Mozilla.initWebBrowserWindows()V+184
j  org.eclipse.swt.browser.Mozilla.create(Lorg/eclipse/swt/widgets/Composite;I)V+665
j  org.eclipse.swt.browser.Browser.<init>(Lorg/eclipse/swt/widgets/Composite;I)V+81
j  XulTest$1.run()V+47
于 2014-05-19T07:34:34.450 に答える