(Вижте актуализацията най-долу за нова информация.)
Имам Java SWT приложение, което включва интегриран браузър.
Всичко работи добре на Windows и на CENTOS 6.5. Помолиха ме да накарам приложението да работи на нов компютър, на който инсталирах CENTOS 7.
Продължавам да получавам съобщение за грешка no swt-mozilla-gtk-4332 в java.library.path.
Наясно съм с различните страници, които говорят по този въпрос. Например:
StackOverflow 10165693, 6518568, 7130980
Използвам Firefox 24.8.0. Това дойде с CENTOS 7. Току-що актуализирах и целия софтуер.
Препратките показват, че трябва да имам OpenJDK, което правя. Това е единствената версия, която може да изпълнява Java.
Инсталирах по друга препоръка xulrunner (yum инсталирайте 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 е независима от версията, но предполагам, че не е напълно.