Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Standard Widget Toolkit (SWT) » SWT Event Dispatching in new Runnable() - SWT on Mac OS X 10.4.1
SWT Event Dispatching in new Runnable() - SWT on Mac OS X 10.4.1 [message #456909] Mon, 13 June 2005 10:54 Go to next message
Eclipse UserFriend
Originally posted by: jacoby.abgenial.com

I'm probably being really dim here.

The snippet below correctly displays a shell if I invoke test.run() inline.

But if I try to start a new thread called (say) ui to do the job, no dice.
The shell appears, but d.sleep() never exits in response to any mouse
action, so the shell effectively hangs.

The SWT JavaDocs say that the thread that creates a Display is the UI thread
by definition, so what is going wrong?

public class Test implements Runnable {


public void run() {
Display d = new Display();
Shell s = new Shell(d);
s.setSize(500, 500);
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch())
d.sleep();
}
d.dispose();
}

}


public static void main(String[] args) throws Exception {
Test test = new Test();
//test.run(); // THIS WORKS FINE (IF UNCOMMENTED!)


// THIS DOESN"T WORK - WINDOW APPEARS BUT UI THREAD SEES NO EVENTS
Thread ui = new Thread( test, "Test thread");
ui.start();
ui.join();
}
}
Re: SWT Event Dispatching in new Runnable() - SWT on Mac OS X 10.4.1 [message #456979 is a reply to message #456909] Mon, 13 June 2005 18:02 Go to previous message
Eclipse UserFriend
Originally posted by: dano.labrosse.gmail.com

Hi Jacoby ,

If I understand the issue correctly here, it looks like you want to get
back onto the UI thread from another thread.

Thread longTask = new Thread(new Runnable() {

Display.getDefault().asyncExec(new Runnable() {
public void run() {
//update the UI components here
}
});

});

asyncExec will get you back on to the Event Dispatch (UI thread),
syncExec will do the same but will block until the the GUI is finished
updating.

-Dano

Jacoby Thwaites wrote:
> I'm probably being really dim here.
>
> The snippet below correctly displays a shell if I invoke test.run() inline.
>
> But if I try to start a new thread called (say) ui to do the job, no dice.
> The shell appears, but d.sleep() never exits in response to any mouse
> action, so the shell effectively hangs.
>
> The SWT JavaDocs say that the thread that creates a Display is the UI thread
> by definition, so what is going wrong?
>
> public class Test implements Runnable {
>
>
> public void run() {
> Display d = new Display();
> Shell s = new Shell(d);
> s.setSize(500, 500);
> s.open();
> while (!s.isDisposed()) {
> if (!d.readAndDispatch())
> d.sleep();
> }
> d.dispose();
> }
>
> }
>
>
> public static void main(String[] args) throws Exception {
> Test test = new Test();
> //test.run(); // THIS WORKS FINE (IF UNCOMMENTED!)
>
>
> // THIS DOESN"T WORK - WINDOW APPEARS BUT UI THREAD SEES NO EVENTS
> Thread ui = new Thread( test, "Test thread");
> ui.start();
> ui.join();
> }
> }
>
>
Previous Topic:Drag and Drop - dragSetData never gets called
Next Topic:StyledText doesn't recognise SWT.FLAT
Goto Forum:
  


Current Time: Fri Apr 26 14:23:27 GMT 2024

Powered by FUDForum. Page generated in 0.02791 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top