[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [udig-devel] how to start threads with monitor?
|
On Mon, 2007-04-30 at 10:34 +0200, Andrea Antonello wrote:
> Hi Adrian,
> I don't understand exactly what you mean.
>
> Not asking users during the calculations at all or just the yes/no?
phrasing the question as yes/no. Pick other names and skip the standard
SWT dialog. It's more work for us, we have to build a custom dialog, but
saves our users time and confusion. Actually we should probably build
our own equivalent of the yes/no dialog...
--adrian
>
> I make you an example. I have a shapefile representing the a river. The
> user digitalized it very badly, so I'm not sure how to get the river to
> go from its highest point to it's lowest (immagining I have no elevation
> info). I extract all the coords, order them nicely and then, I have to
> ask the user if the direction is the right one.
> How to do that without a dialog window?
>
> I'm very willing to talk about that if that can make usability better.
> Andrea
>
>
>
> Adrian Custer probaly wrote:
> > On Sun, 2007-04-29 at 18:36 +0200, Andrea Antonello wrote:
> >> Two questions about the PlatformGIS.runInProgressDialog method:
> >> 1) if something goes wrong the method swallows the exception thrown in
> >> the code, saying they get logged, however the thread returns without
> >> saying anything about the error to the workbench. Why that?
> >> 2) Ok about decoupling gui and algorythm, but what if I need to ask a
> >> yes or no to the user
> >
> > PLEASE, Please, please: No yes/no questions.
> > I realize this is going to be hard with eclipse but we have found that
> > asking users in that way is BAD.
> > (1) It makes users read the question which slows everyone down
> > (2) There are some situations where phrasing the question
> > becomes very hard.
> > So please, come up with workflow terms (verbs) Act/Don't Act,
> > Calculate/Cancel or other pairs.
> >
> > Please protect our users (i.e. me),
> > thanks,
> > adrian
> >
> >> as soon as something was calculated inside the
> >> algorythm? If I put inside the IRunnableWithProgress a dialog, at that
> >> point the method breaks (due to the hidden exception) and returns
> >> without saying anything. What if I would like to popup a warning dialog?
> >> Is there a way? In swing the invokelater gave that possibility, but how
> >> to do here?
> >>
> >> Andrea
> >>
> >>
> >>
> >>
> >> Jesse Eichar probaly wrote:
> >>> So I think you could just reorder things then:
> >>>
> >>> final Runnable openMessage = new Runnable(){
> >>> public void run(){
> >>> MessageDialog dialog = new MessageDialog(new Shell(SWT.BORDER |
> >>> SWT.DIALOG_TRIM), "Warning", null, "Will I show up?",
> >>> MessageDialog.WARNING, new String[]{"Ok"}, 0);
> >>> dialog.open();
> >>> }
> >>> }
> >>> }
> >>>
> >>> Display.getDefault().asyncExec( openMessage );
> >>>
> >>> IRunnableWithProgress operation = new IRunnableWithProgress(){
> >>>
> >>> public void run( IProgressMonitor monitor ) throws
> >>> InvocationTargetException, InterruptedException {
> >>> monitor.beginTask("Message!!!", 100);
> >>> // do operation.
> >>> };
> >>>
> >>> PlatformGIS.runInProgressDialog( "Running my Operation", true, operation );
> >>>
> >>>
> >>> On Apr 26, 2007, at 11:56 PM, Andrea Antonello wrote:
> >>>
> >>>> alright, I'm not as good as I would like in describing things :)
> >>>> So here I go:
> >>>>
> >>>> I used the tool extention point to create an Action. This is a button in
> >>>> the toolbar that launches a dialog used to configure the module.
> >>>> So I click on the button and a fancy dialog appears. I set my variables
> >>>> and maps and push the start button. At that point I would like to have
> >>>> my whole gui not to be blocked, while the algorithm does its work.
> >>>> Also I would give feedback to the user about what is going on, so I need
> >>>> the monitor instance.
> >>>>
> >>>> Your example below has two problems;
> >>>> - it starts up a progress window while the user has to first fill in
> >>>> stuff in the dialog, so no work is done at that point (only after
> >>>> pushing start button on the dialog)
> >>>> - I do not have the monitor instance yet
> >>>>
> >>>>
> >>>> Andrea
> >>>>
> >>>>
> >>>> Jesse Eichar probaly wrote:
> >>>>> Hi Andrea. I think we need more of your intentions. So usually if you
> >>>>> are running with a progress monitor you are NOT in the Display thread so
> >>>>> you can't do any UI stuff, much like Swing. Second that method has a
> >>>>> bug so the progress monitor is currently hidden. I will fix that bug.
> >>>>> For now use runInProgressDialog So for your example you may want to
> >>>>> do:
> >>>>>
> >>>>> final Runnable openMessage = new Runnable(){
> >>>>> public void run(){
> >>>>> MessageDialog dialog = new MessageDialog(new Shell(SWT.BORDER |
> >>>>> SWT.DIALOG_TRIM),
> >>>>> "Warning", null, "Will I show up?",
> >>>>> MessageDialog.WARNING, new String[]{"Ok"}, 0);
> >>>>> dialog.open();
> >>>>> }
> >>>>> }
> >>>>> }
> >>>>>
> >>>>> IRunnableWithProgress operation = new IRunnableWithProgress(){
> >>>>>
> >>>>>
> >>>>>
> >>>>> public void run( IProgressMonitor monitor ) throws
> >>>>> InvocationTargetException, InterruptedException {
> >>>>> monitor.beginTask("Message!!!", 100);
> >>>>>
> >>>>> Display.getDefault().asyncExec( openMessage );
> >>>>>
> >>>>> };
> >>>>>
> >>>>>
> >>>>> runInProgressDialog( "Running my Operation", true, operation );
> >>>>>
> >>>>> Jesse
> >>>>>
> >>>>>
> >>>>> On Apr 26, 2007, at 2:43 PM, Andrea Antonello wrote:
> >>>>>
> >>>>>> Hi Jesse,
> >>>>>> I think I really miss a piece of the truth...
> >>>>>>
> >>>>>> Reduced to the minimum, I now only try to launch a messagedialog from
> >>>>>> within the run method of the AbstractActionTool retrieved from the
> >>>>>> tools extention point. It is really few code:
> >>>>>>
> >>>>>> IRunnableWithProgress runner = new IRunnableWithProgress(){
> >>>>>>
> >>>>>> public void run( IProgressMonitor monitor ) throws
> >>>>>> InvocationTargetException, InterruptedException {
> >>>>>> monitor.beginTask("Message!!!", 100);
> >>>>>> MessageDialog dialog = new MessageDialog(new Shell(SWT.BORDER |
> >>>>>> SWT.DIALOG_TRIM),
> >>>>>> "Warning", null, "Will I show up?",
> >>>>>> MessageDialog.WARNING, new String[]{"Ok"}, 0);
> >>>>>> dialog.open();
> >>>>>> }
> >>>>>>
> >>>>>> };
> >>>>>>
> >>>>>> PlatformGIS.run(runner);
> >>>>>>
> >>>>>>
> >>>>>> This gives the usual error of invealid thread access. What is wrong
> >>>>>> here?
> >>>>>> If I use the runBlockingOperation method it is worse, nothing shows up.
> >>>>>>
> >>>>>> Any idea?
> >>>>>> Andrea
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Jesse Eichar probaly wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> Display widgets can only be modified in the display thread. Take a
> >>>>>>> look
> >>>>>>> at the methods is PlatformGIS for a bunch of help with regards to
> >>>>>>> threading.
> >>>>>>>
> >>>>>>> As mentioned Jobs start up a new thread and allow progress to be
> >>>>>>> monitored. If you set the job's setUser( true ) then the progress
> >>>>>>> dialog will open. Remember that you have to update UI components
> >>>>>>> in the
> >>>>>>> Display thread. Display.asyncExec for example.
> >>>>>>>
> >>>>>>> Jesse
> >>>>>>>
> >>>>>>> On Apr 23, 2007, at 6:40 AM, Andrea Antonello wrote:
> >>>>>>>
> >>>>>>>> Thanks for your reply Zlatko,
> >>>>>>>> I tried also the Job way, but I get the same Invalid Thread Access
> >>>>>>>> exception:
> >>>>>>>>
> >>>>>>>> Job job = new Job("my job ") {
> >>>>>>>> protected IStatus run(IProgressMonitor monitor) {
> >>>>>>>> domyCodeWork()
> >>>>>>>> return Status.OK_STATUS;
> >>>>>>>> }
> >>>>>>>> };
> >>>>>>>>
> >>>>>>>> job.schedule();
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Also the code you modified below doesn't work with the same error...
> >>>>>>>>
> >>>>>>>> I'm really confused (and I'm rather new to RCP and SWT), sinced in my
> >>>>>>>> opinion it happens often that you launch a dialog and while the
> >>>>>>>> dialog
> >>>>>>>> is there you do some work, without freezing the interface. But I
> >>>>>>>> can't
> >>>>>>>> find working examples.
> >>>>>>>>
> >>>>>>>> In swing there was this SwingUtilities.invokelater that worked pretty
> >>>>>>>> well.
> >>>>>>>>
> >>>>>>>> I guess I 'm missing something of the deeper theory.
> >>>>>>>>
> >>>>>>>> Isn't there in udig an Action that does something like that?
> >>>>>>>>
> >>>>>>>> Andrea
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Zlatko Perenda probaly wrote:
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I did some asking around, this is what a friend of mine came up
> >>>>>>>>> with....
> >>>>>>>>>
> >>>>>>>>> You have to implement a job, org.eclipse.core.runtime.jobs.Job . You
> >>>>>>>>> have
> >>>>>>>>> run(IprogressMonitor pm) there, where you implement the method and
> >>>>>>>>> change
> >>>>>>>>> whatever you want through pm. You can add listeners if you want
> >>>>>>>>> to do
> >>>>>>>>> something after the job is done.
> >>>>>>>>>
> >>>>>>>>> And your code from first post, reworked some
> >>>>>>>>>
> >>>>>>>>> Display display = Display.getCurrent();
> >>>>>>>>> if (display == null)
> >>>>>>>>> {
> >>>>>>>>> display = Display.getDefault();
> >>>>>>>>> }
> >>>>>>>>> display.asyncExec(new Runnableevent)
> >>>>>>>>> {
> >>>>>>>>> public void run()
> >>>>>>>>> {
> >>>>>>>>>> IWorkbench wb = PlatformUI.getWorkbench();
> >>>>>>>>>> IProgressService ps = wb.getProgressService();
> >>>>>>>>>> ps.busyCursorWhile(new IRunnableWithProgress(){
> >>>>>>>>>> public void run( IProgressMonitor pm ) {
> >>>>>>>>>> doMyCodeWithMonitorActivity()
> >>>>>>>>>> }
> >>>>>>>>>> });
> >>>>>>>>>>
> >>>>>>>>> }
> >>>>>>>>> });
> >>>>>>>>>
> >>>>>>>>> I hope this helps....
> >>>>>>>>>
> >>>>>>>>> Zlatko.
> >>>>>>>>>
> >>>>>>>>> -----Original Message-----
> >>>>>>>>> From: Andrea Antonello [mailto:andrea.antonello@xxxxxxxxx]
> >>>>>>>>> Sent: Monday, April 23, 2007 2:42 PM
> >>>>>>>>> To: Zlatko Perenda
> >>>>>>>>> Cc: 'User-friendly Desktop Internet GIS'
> >>>>>>>>> Subject: Re: [udig-devel] how to start threads with monitor?
> >>>>>>>>>
> >>>>>>>>> Hi Zlatko,
> >>>>>>>>> that is indeed what I am doing to make it work for now (the
> >>>>>>>>> asyncExec I
> >>>>>>>>> mean), but that doesn't supply my the so much loved monitor...
> >>>>>>>>> Where do I get the monitor from?
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>> Andrea
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Zlatko Perenda probaly wrote:
> >>>>>>>>>> Hm, seems like you are accesing UI thread, from another....
> >>>>>>>>>>
> >>>>>>>>>> Try Display.asyncExec(runnable), and let runnable do the neccesary
> >>>>>>>>>> work. I
> >>>>>>>>>> think this should work.
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: udig-devel-bounces@xxxxxxxxxxxxxxxxxxxxx
> >>>>>>>>>> <mailto:udig-devel-bounces@xxxxxxxxxxxxxxxxxxxxx>
> >>>>>>>>>> [mailto:udig-devel-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> >>>>>>>>>> Andrea
> >>>>>>>>>> Antonello
> >>>>>>>>>> Sent: Monday, April 23, 2007 2:25 PM
> >>>>>>>>>> To: User-friendly Desktop Internet GIS
> >>>>>>>>>> Subject: [udig-devel] how to start threads with monitor?
> >>>>>>>>>>
> >>>>>>>>>> I know this is more a rcp question than a udig, but I'm not
> >>>>>>>>>> able to
> >>>>>>>>>> add
> >>>>>>>>>> progress tracking to my actions.
> >>>>>>>>>> The tool extention point doesn't supply a monitor and whenever I
> >>>>>>>>>> try
> >>>>>>>>>> somethin g like:
> >>>>>>>>>> IWorkbench wb = PlatformUI.getWorkbench();
> >>>>>>>>>> IProgressService ps = wb.getProgressService();
> >>>>>>>>>>
> >>>>>>>>>> ps.busyCursorWhile(new IRunnableWithProgress(){
> >>>>>>>>>> public void run( IProgressMonitor pm ) {
> >>>>>>>>>>
> >>>>>>>>>> doMyCodeWithMonitorActivity()
> >>>>>>>>>> }
> >>>>>>>>>> });
> >>>>>>>>>> I get an Invalid thread access exception.
> >>>>>>>>>>
> >>>>>>>>>> Any hint?
> >>>>>>>>>> Thanks in advance,
> >>>>>>>>>> Andrea
> >>>>>>>>>> _______________________________________________
> >>>>>>>>>> User-friendly Desktop Internet GIS (uDig)
> >>>>>>>>>> http://udig.refractions.net
> >>>>>>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>> _______________________________________________
> >>>>>>>> User-friendly Desktop Internet GIS (uDig)
> >>>>>>>> http://udig.refractions.net
> >>>>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
> >>>>>>>
> >>>
> >> _______________________________________________
> >> User-friendly Desktop Internet GIS (uDig)
> >> http://udig.refractions.net
> >> http://lists.refractions.net/mailman/listinfo/udig-devel
> >
> >