(См. обновление внизу для получения новой информации.)
У меня есть приложение Java SWT со встроенным браузером.
Все отлично работает на Windows и на CENTOS 6.5. Меня попросили заставить приложение работать на новом компьютере, на который я установил CENTOS 7.
Я продолжаю получать сообщение об ошибке no swt-mozilla-gtk-4332 в java.library.path.
Я знаю о различных страницах, которые говорят по этому вопросу. Например:
StackOverflow 10165693, 6518568, < href="https://stackoverflow.com/questions/7130980">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 сейчас на Луне, так что это может решить проблему, нужно проверить. Обычно это означает обновленную библиотеку SWT. Я действительно думал, что Java не зависит от версии, но я думаю, что не совсем.