(有关新信息,请参阅底部更新.)
我有一个包含集成浏览器的Java SWT应用程序.
在Windows和CENTOS 6.5上一切正常.我被要求让应用程序在我安装CENTOS 7的新计算机上运行.
我一直在java.library.path错误消息中收到no swt-mozilla-gtk-4332.
我知道有关此问题的各种页面.例如:
StackOverflow的10165693,6518568,7130980
Jazz.net,Eclipse.org
我使用的是Firefox 24.8.0.随附CENTOS 7.我刚刚更新了所有软件.
引用表明我应该有OpenJDK,我这样做.这是唯一可以执行Java的版本.
我安装了另一个推荐xulrunner(yum install xulrunner).
我设置:MOZILLA_FIVE_HOME =/usr/lib/mozilla(有人说使用其他人不说的.我试过两个.另外,有一个问题指向"/ usr/lib64/xulrunner"少了双引号,但是这不起作用.是的,这个文件夹存在.)
587人和计数赞成Ubuntu解决方案:
ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
没有jni文件夹,以及该选项无法正常工作的任何方式.
正如我所提到的,只有一个程序,所以
sudo update-alternatives --config java
没用
问题是什么以及如何解决?由于CENTOS 6.5机器可以运行(可能是因为缺少软件包?)而7没有,所以不能只是我需要在我的jar文件中添加一些东西,就像以前一样.
注意:这是我的/etc/profile.d/java.sh文件内容:
export MOZILLA_FIVE_HOME=/usr/lib/mozilla export LD_LIBRARY_PATH=${MOZILLA_FIVE_HOME}:${LD_LIBRARY_PATH}
这是实际的错误输出.
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: org.eclipse.swt.SWTError: No more handles [MOZILLA_FIVE_HOME='/usr/lib/mozilla'] (java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
no swt-mozilla-gtk-4332 in java.library.path
no swt-mozilla-gtk in java.library.path
/home/hts/.swt/lib/linux/x86_64/libswt-mozilla-gtk-4332.so: libxpcom.so: cannot open shared object file: No such file or directory
Can't load library: /home/hts/.swt/lib/linux/x86_64/libswt-mozilla-gtk.so
)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.browser.Mozilla.initMozilla(Unknown Source)
at org.eclipse.swt.browser.Mozilla.create(Unknown Source)
at org.eclipse.swt.browser.Browser.(Unknown Source)
at prjNetAccelerator.AppMain.createContents(Unknown Source)
at prjNetAccelerator.AppMain.open(Unknown Source)
at prjNetAccelerator.AppWrapper.doLaunch(Unknown Source)
at prjNetAccelerator.AppWrapper.main(Unknown Source)
... 5 more
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
no swt-mozilla-gtk-4332 in java.library.path
no swt-mozilla-gtk in java.library.path
/home/hts/.swt/lib/linux/x86_64/libswt-mozilla-gtk-4332.so: libxpcom.so: cannot open shared object file: No such file or directory
Can't load library: /home/hts/.swt/lib/linux/x86_64/libswt-mozilla-gtk.so
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
... 12 more
更新
错误文本显示了问题,即系统找不到libxpcom.so.版本22.0中的Mozilla(xulruntime)用libxul.so替换了文件libxpcom.so和mozsqlite3.so.libsmozsqlite3.so文件除了消失之外还停留了几个版本.所有其他文件与版本28.x相同,这是截至今天(2014.09.18)的当前版本.
由于某种原因,集成的SWT浏览器需要旧版本,即使它不存在.问题是:
SWT决定使用哪个版本的Gecko GTK +/xulrunner的机制是什么?
SWT的新版本,虽然我认为我的Eclipse Kepler版本是最新的,但是解决了这个问题?
如何让SWT定位新版本?
Firefox或Chrome的问题还是有什么关系?
我现在理解大部分问题,但不是全部.
我看到Eclipse现在在Luna,因此可以解决问题,必须检查.这通常意味着更新的SWT库.我真的认为Java是版本独立的,但我想并不完全.
我刚刚在Ubuntu 14.04上遇到了同样的错误,并通过安装旧版本解决了这个问题:
sudo apt-get install libwebkitgtk-1.0-0
libwebkitgtk-3.0-0
已安装