系统信息:ubuntu 12.04 TSL 32位x86系统
今天第一次用ubuntu的系统启动eclipse内置的游览器报了这样的错误:
eclipse3.5(jee)和eclipse3.7(sdk)版的内置游览器都在Ubuntu12.04 LTS报了这样的错误:
Nomore handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]
org.eclipse.swt.SWTError:No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]
atorg.eclipse.swt.SWT.error(SWT.java:4109)
atorg.eclipse.swt.browser.Mozilla.initMozilla(Mozilla.java:1672)
atorg.eclipse.swt.browser.Mozilla.create(Mozilla.java:637)
atorg.eclipse.swt.browser.Browser.<init>(Browser.java:119)
atorg.eclipse.ui.internal.browser.BrowserViewer.<init>(BrowserViewer.java:225)
atorg.eclipse.ui.internal.browser.WebBrowserView.createPartControl(WebBrowserView.java:48)
atorg.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:375)
atorg.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229)
atorg.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
atorg.eclipse.ui.internal.WorkbenchPage$ActivationList.setActive(WorkbenchPage.java:4218)
atorg.eclipse.ui.internal.WorkbenchPage$18.runWithException(WorkbenchPage.java:3277)
atorg.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
atorg.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
atorg.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
atorg.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3527)
atorg.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3174)
atorg.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
atorg.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1566)
atorg.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
atorg.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
atorg.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
atorg.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3527)
atorg.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3174)
解决方法:sudoapt-get install libwebkitgtk-1.0-0
重新启动一下eclipse,eclipse3.7中游览器可用了,但是eclipse3.5的游览器仍然不可用,可能是3.7版本较3.5版本做了改进,减少了对系统的依赖。eclipse3.5仍然报上面的错误,它不是说MOZILLA_FIVE_HOME这个环境变量没有设置么,给他设一个编辑一下/etc/profile
export MOZILLA_FIVE_HOME=/usr/lib/mozilla/ 重新启动eclipse仍然报下面的错误:
Nomore handles [MOZILLA_FIVE_HOME='/usr/lib/mozilla/'](java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
/home/eclipse/configuration/org.eclipse.osgi/bundles/563/1/.cp/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
noswt-mozilla-gtk in java.library.path
/tmp/swtlib-32/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
Can'tload library: /tmp/swtlib-32/libswt-mozilla-gtk.so
)
org.eclipse.swt.SWTError:No more handles [MOZILLA_FIVE_HOME='/usr/lib/mozilla/'](java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
/home/eclipse/configuration/org.eclipse.osgi/bundles/563/1/.cp/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
noswt-mozilla-gtk in java.library.path
/tmp/swtlib-32/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
Can'tload library: /tmp/swtlib-32/libswt-mozilla-gtk.so
)
atorg.eclipse.swt.SWT.error(SWT.java:4109)
atorg.eclipse.swt.browser.Mozilla.initMozilla(Mozilla.java:1703)
atorg.eclipse.swt.browser.Mozilla.create(Mozilla.java:637)
atorg.eclipse.swt.browser.Browser.<init>(Browser.java:119)
atorg.eclipse.ui.internal.browser.BrowserViewer.<init>(BrowserViewer.java:225)
atorg.eclipse.ui.internal.browser.WebBrowserView.createPartControl(WebBrowserView.java:48)
atorg.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:375)
atorg.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229)
atorg.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
atorg.eclipse.ui.internal.Perspective.showView(Perspective.java:2245)
atorg.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1071)
atorg.eclipse.ui.internal.WorkbenchPage$20.run(WorkbenchPage.java:3822)
atorg.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
atorg.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3819)
atorg.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3795)
atorg.eclipse.ui.handlers.ShowViewHandler.openView(ShowViewHandler.java:162)
atorg.eclipse.ui.handlers.ShowViewHandler.openOther(ShowViewHandler.java:106)
atorg.eclipse.ui.handlers.ShowViewHandler.execute(ShowViewHandler.java:74)
atorg.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
atorg.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
atorg.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
atorg.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
atorg.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
atorg.eclipse.ui.internal.ShowViewMenu$3.run(ShowViewMenu.java:144)
atorg.eclipse.jface.action.Action.runWithEvent(Action.java:498)
atorg.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
atorg.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
atorg.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
atorg.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
atorg.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
atorg.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3552)
atorg.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3171)
atorg.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
atorg.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
atorg.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
atorg.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
atorg.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
atorg.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
atorg.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
atorg.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
atorg.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
atorg.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
atorg.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
atorg.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
atorg.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
atjava.lang.reflect.Method.invoke(Method.java:597)
atorg.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
atorg.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
atorg.eclipse.equinox.launcher.Main.run(Main.java:1407)
Causedby: java.lang.UnsatisfiedLinkError: Could not load SWT library.Reasons:
/home/eclipse/configuration/org.eclipse.osgi/bundles/563/1/.cp/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
noswt-mozilla-gtk in java.library.path
/tmp/swtlib-32/libswt-mozilla-gtk-3650.so:libxpcom.so:无法打开共享对象文件:没有那个文件或目录
Can'tload library: /tmp/swtlib-32/libswt-mozilla-gtk.so
atorg.eclipse.swt.internal.Library.loadLibrary(Library.java:267)
atorg.eclipse.swt.internal.Library.loadLibrary(Library.java:174)
atorg.eclipse.swt.browser.Mozilla.initMozilla(Mozilla.java:1688)
...50 more
分析:从eclipse的官网大概知道:内置游览器要想在linux上跑有这两方面的依赖:Webkit和Xulrunner 检查一下系统的/usr/lib下面确实没有xulrunneryyu于是在https://developer.mozilla.org/en-US/docs/Gecko_SDK下载xulrunner-sdk
得到一个这样的文件:xulrunner-3.6.28.en-US.linux-i686.sdk.tar.bz2解压一下
cd xulrunner-sdk/bin
./xulrunner–register-global //注册一下xulrunner
重新启动一下eclipse,这时它的内置游览器就应该可用了。这时重新删除MOZILLA_FIVE_HOME环境变量,内置游览器仍然可用,说明MOZILLA_FIVE_HOME这个环境变量不是靠手动来设置的,而是系统内部已经设定好的。