Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-swt-dev] firefox crashed when listen progress

Please use Bugzilla to report bugs:
https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Platform&component=SWT

Markus



From:        baobeileaf <baobeileaf@xxxxxxxxx>
To:        platform-swt-dev <platform-swt-dev@xxxxxxxxxxx>
Date:        2014-08-06 10:40
Subject:        [platform-swt-dev] firefox crashed when listen progress
Sent by:        platform-swt-dev-bounces@xxxxxxxxxxx




 
hi guys,
 
firefox(xulrunner) just crashed when navigating to special urls, such as : http://www.hbyxx.cn.   it saids:
 
Exception in thread "Thread-0" org.eclipse.swt.SWTError: XPCOM error 0x80004002
at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:2794)
at org.eclipse.swt.browser.Mozilla.HandleEvent(Mozilla.java:4897)
at org.eclipse.swt.browser.Mozilla$20.method3(Mozilla.java:1310)
at org.eclipse.swt.internal.mozilla.XPCOMObject.callback3(XPCOMObject.java:272)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2549)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759)
at BrowserFirefox$1.run(TestFirefox.java:77)
at java.lang.Thread.run(Unknown Source)
 
everything is ok if not adding progress listener.
or, how to determine if the browser is completed(onload) not using progress_listener ?
 
my env:
  system: window7, centos 6
  swt: swt4.4
  xulrunner: 10.0.2, 24.0
 
 
testing code:
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
 
public class TestFirefox {
public static void main(String[] args) throws Exception
{
// change this xulrunner position to your own
System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "F:\\exchange\\xulrunner-10.0.2.en-US.win32\\xulrunner");
 
BrowserFirefox firefox = new BrowserFirefox();
firefox.navigate("http://www.hbyxx.cn/");
while(true)
Thread.sleep(100000);
}
}
 
class Single<T>
{
public T first;
public Single(T d)
{
first = d;
}
}
 
class BrowserFirefox {
Thread mDispatchThread;
Display mDisplay;
Shell mShell;
Browser mBrowser;
 
public BrowserFirefox() throws Exception {
final Single<Boolean> isStarted = new Single<Boolean>(false);
 
// start display thread
mDispatchThread = new Thread(new Runnable() {
 
@Override
public void run() {
try {
mDisplay = new Display();
mShell = new Shell(mDisplay, SWT.TOOL | SWT.TITLE | SWT.BORDER);
mShell.setVisible(true);
mShell.setLayout(new FillLayout());
mShell.setBounds(0, 0, 850, 650);
 
mBrowser = new Browser(mShell, SWT.NORMAL | SWT.MOZILLA);
mBrowser.setSize(800, 600);
mBrowser.addProgressListener(new ProgressListener() {
 
@Override
public void completed(ProgressEvent event) {
System.out.println("completed:" + event);
}
 
@Override
public void changed(ProgressEvent event) {
System.out.println("changed:" + event);
}
});
 
synchronized (isStarted) {
isStarted.first = true;
isStarted.notify();
}
while ( !mDisplay.isDisposed()) {
if (!mDisplay.readAndDispatch())
mDisplay.sleep();
}
 
mDisplay.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}
});
mDispatchThread.start();
 
// wait for complete
long timeoutPoint = System.currentTimeMillis() + 30000;
while (System.currentTimeMillis() < timeoutPoint && mDispatchThread.isAlive()) {
Thread.sleep(1000);
synchronized (isStarted) {
if (isStarted.first)
return;
}
}
 
// err
mDispatchThread.interrupt();
throw new Exception("create firefox browser timeout or err.");
}
 
// navigate url
public void navigate(final String url) {
final Single<Boolean> isFinished = new Single<Boolean>(false);
if (!mDisplay.isDisposed()) {
Runnable runnable = new Runnable() {
public void run() {
mBrowser.setUrl(url);
 
synchronized (isFinished) {
isFinished.first = true;
isFinished.notify();
}
}
};
mDisplay.syncExec(runnable);
}
 
// wait for complete
try {
while (true) {
synchronized (isFinished) {
if (!isFinished.first)
isFinished.wait();
else
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
 
 


baobeileaf_______________________________________________
platform-swt-dev mailing list
platform-swt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/platform-swt-dev

Back to the top