วันจันทร์ที่ 23 สิงหาคม พ.ศ. 2553

Workaround and Fixed SWT XPCOM error in Eclipse helios(3.6) on Ubuntu lucid (10.04)

ตั้งแต่ลง Ubuntu 10.04 เปิด eclipse สร้าง workspace ใหม่ ขณะกำลังโหลด splashscreen เจอมันปิดตัวเองเฉยเลย ลองเรียก eclipse ด้วย workspace เดิมอีกรอบก็ไม่มีปัญหา

Error message
Error while informing user about event loop exception:
org.eclipse.swt.SWTError: XPCOM error -2147467262
at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:2089)
at org.eclipse.swt.browser.Mozilla.unhookDOMListeners(Mozilla.java:2453)

หลังจากเปิด Eclipse ได้สั่งสร้าง project ปัญญาอ่อนธรรมดา (new Java Project) กด finish พระเจ้า eclipse ค้าง ต้องสั่ง kill process กันเลยทีเดียวแต่เปิดใน workspace ดูจะพบ project ที่สร้างเสร็จแล้ว หลังจากนั้นเปิด Eclipse ใหม่ขึ้นมา import project เข้ามาลองสร้าง project ใหม่ก็ไม่เจอปัญหาอะไร ปัญหานี้จำได้ว่าไม่เจอ error message

อีกปัญหาลองเปิด JSP โดยใช้ web page editor เพื่อสร้างและแก้ไข JSP แบบ WYSIWYG ปกติไม่เคยเปิดใช้เลย กำลังจะโม้ให้คนอื่นหันมาใช้ eclipse ปรากฎว่าพอคลิ๊กที่ preview ก็เจอป๊อบอัพ error
Unhandled event loop exception
XPCOM error -2147467259

จริงๆแล้ว error นี้อาจเจอบน Eclipse เวอร์ชั่นก่อนหน้านี้ด้วยแต่ไม่ได้เปิดใช้ web page editor เลยไม่เจอ
Error message
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTError: XPCOM error -2147467259
at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:2347)
at org.eclipse.swt.browser.Mozilla.initXULRunner(Mozilla.java:2310)


ทางแก้ที่หาๆมา
ปัญหาแรกก่อน เจอมาว่าให้เซ็ต XULRunnerPath ใน eclipse.ini
-Dorg.eclipse.swt.browser.XULRunnerPath=/usr/lib/xulrunner

แต่ /usr/lib/xulrunner มันไม่มีอยู่ในเครื่องนี่หว่า ที่มีอยู่คือ /usr/lib/xulrunner-1.9.2.8 ลองใช้ xulrunner-1.9.2.8 ก็เจอปัญหาเดิม
งั้นใช้ตามเค้า /usr/lib/xulrunner ปัญหาแรกหมดไปคงเพราะ eclipse หา XULRunner ไม่เจอมันเลยใช้ engine ของตัวเองแทน
ดังนั้นคิดว่า Eclipse เองรู้จัก XULRunner อยู่แล้วการไปแก้เป็นพาร์ทที่ไม่มีอยู่จริงเช่น /usr/lib/xulrunner ก็เพื่อให้ eclipse ใช้ engine ของตัวเองแทน

อีกวิธีในการแก้ปัญหานี้คือการลบ eclipse ภายใต้ ~/.mozilla ก่อนที่จะสร้าง workspace
rm -Rf ~/.mozilla/eclipse/

การแก้ปัญหาแรกด้วยการเซ็ตด้วยพาร์ทที่ผิดนี้จะมีปัญหากับการแก้ปัญหาที่สามด้วย ดังนั้นทางแก้ของปัญหานี้ใช้การลบ eclipse ภายใต้ ~/.mozilla ดีทีสุดหรือไม่ก็ยอมให้มันปิดตัวเองแล้วเรียกใหม่

ปัญหาที่สอง eclipse ค้างตอนสร้าง โปรเจคแรกใน workspace (สร้างโปรเจคถัดไปจะไม่เจอปัญหาแล้ว)
ไม่พบทางแก้ปัญหา คงต้องยอมค้าง แต่ปกติสร้าง project ผ่าน M2Eclipse plugin อยู่แล้ว(สร้าง project โดยใช้ Maven) จะไม่เจอปัญหานี้ หรือไม่ก็ทำยังไงก็ได้ให้มีสักโปรเจคอยู่ใน workspace นี้เช่นการ import project เข้ามาก็ช่วยได้

ปัญหาที่สาม เรื่อง web page editor เจอก็ตอนจะโม้ชาวบ้านนี่แหละพบว่าเป็นปัญหาเรื่องขาด libstdc++5 ซึ่งไม่มีบน repository ของ Ubuntu 10.04 ด้วยต้องไปเอาจากเวอร์ชั่น Jaunty มาใช้แทน หรือไม่ก็เอา package จาก debian มาใช้ก็ได้เหมือนกัน บน Ubuntu โดนเอาออกตั้งแต่ Karmic แล้ว
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_i386.deb

สำหรับ 32-bit
sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_i386.deb


สำหรับ 64-bit
บังคับลง i386 ก่อน
sudo dpkg --force-architecture -i libstdc++5_3.3.6-17ubuntu1_i386.deb

เสร็จแล้วย้าย lib ไปวางไว้ให้ถูกที่
sudo mv /usr/lib/libstdc++.so.5* /usr/lib32/

หมายเหตุ ขั้นตอนข้างบนนี้ใช้ dpkg -x แตก lib แล้วย้ายไปลง /usr/lib32/ ก็ได้เหมือนกัน

ต่อจากนั้นก็ลง package ของ 64-bit
sudo dpkg -i libstdc++5_3.3.6-17ubuntu1_amd64.deb

ตรวจสอบว่า lib ได้ตั้งตั้งไปเรียบร้อยแล้ว
sudo updatedb
locate libstdc++.so.
จะได้ตำแหน่งของ libstdc++.so ดังนี้
/usr/lib/libstdc++.so.5
/usr/lib/libstdc++.so.5.0.7
/usr/lib/libstdc++.so.6
/usr/lib/libstdc++.so.6.0.13
/usr/lib32/libstdc++.so.5
/usr/lib32/libstdc++.so.5.0.7
/usr/lib32/libstdc++.so.6
/usr/lib32/libstdc++.so.6.0.13

ก่อนใช้ eclipse ให้เคลียร์ workspace ทิ้งก่อนด้วยโดยลบ .metadata ที่อยู่ภายใต้ workspace ทิ้ง และลบ eclipse ภายใต้ ~/.mozilla ก่อน
rm -Rf ~/workspace/.metadata/
rm -Rf ~/.mozilla/eclipse/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น