【发布时间】:2014-11-12 02:41:45
【问题描述】:
(有关新信息,请参阅底部的更新。)
我有一个包含集成浏览器的 Java SWT 应用程序。
在 Windows 和 CENTOS 6.5 上一切正常。我被要求让应用程序在我安装了 CENTOS 7 的新计算机上运行。
我不断收到 no swt-mozilla-gtk-4332 in java.library.path 错误消息。
我知道有关此问题的各个页面。例如:
StackOverflow 10165693、6518568、7130980
我使用的是 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.<init>(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。 Mozilla (xulruntime) 在 22.0 版中将文件 libxpcom.so 和 mozsqlite3.so 替换为 libxul.so。该文件 libsmozsqlite3.so 保留了几个版本,而不是消失了。所有其他文件都与版本 28.x 相同,这是截至今天 (2014.09.18) 的当前版本。
集成的 SWT 浏览器出于某种原因需要旧版本,即使它不存在。问题是:
- SWT 确定使用哪个 Gecko GTK+ / xulrunner 版本的机制是什么?
- 更新版本的 SWT(虽然我认为我的 Eclipse Kepler 版本是最新的)能否解决问题?
- 如何让 SWT 以新版本为目标?
- 问题是 Firefox 或 Chrome 还是什么相关?
我现在了解了大部分问题,但不是全部。
我看到Eclipse现在在Luna,所以可能会解决问题,必须检查。这通常意味着更新的 SWT 库。我真的认为 Java 是独立于版本的,但我猜不完全是。
【问题讨论】:
-
你真的下载了 Linux 版本的 SWT 吗?每个平台都有不同的 SWT 版本。
-
不仅每个操作系统都有不同的 SWT 构建,而且每个架构也有不同的构建(X86 和 X64)。我使用的 jar 文件包括所有 SWT 变体,我在运行时加载了相应的变体。这部分工作完美无缺,即使在 Linux 上也是如此。无论出于何种原因,这里的问题都是 GTK+。我没有包含该组件,因此生成路径警告,因为 Firefox 随操作系统一起提供。我安装了必要的组件。据我所知,它就在那里,只是没有使用它。
-
如果 SWT 版本不兼容或问题,错误信息将完全不同。我知道。我已经去过那里并做到了。
-
关键,就像问题6418568一样,是不满意的链接错误。回答这个问题的人说,这种情况下的问题可能是不受支持的 XulRunner。我确实升级到 CENTOS 7,所以可能我拥有的版本太新,但很难检查。我不想降级,因为我在 7,而不是 6.5,如果这甚至是问题,这可能会导致其他问题。
-
@SarahWeinberger 不确定您使用的是哪个 SWT 版本,但可能值得尝试使用 latest one(如果您还没有的话)。