it seems to me that there must be an event that sets your variable 'iwantToStopmyProgram'.
In the code that sets 'iwantToStopmyProgram', instead of setting the variable, you could also interrupt a thread, notify a waiting thread, etc.
So I think you don't need a timeout.
But it is still unclear to me what exactly you want to do.
ImageJ has all the infrastructure for previewing if you have an ExtendedPlugInFilter with a GenericDialog; you need not care about anything except for checking from time to time whether the processing thread was interrupted (simply abort processing in that case).
> Dear Michael,
>
> Thank you for your very didactic and efficient answer.
>
> According to do exactly what I want : to stop the program at any time by
> user interaction (when the image is updated or not) and to avoid image
> processing on not updated image after each timeout, I adapted the code like
> this :
>
> img.addImageListener(this);
> waitingThread = Thread.currentThread();
>
> do {
>
> doUpdate=false;
> synchronized(this){
> while (doUpdate==false){
> try {
> wait(1000);
> if (iwantToStopmyProgram==true) break;
> }
> catch(InterruptedException e) {
> continue;
> }
> }
> }
>
> //image processing on updated image
>
> }while (iwantToStopmyProgram==false)
>
> public synchronized void imageUpdated(ImagePlus img) {
> if (img == this.img && waitingThread != null){
> waitingThread.interrupt();
> doUpdate=true;
> }
> }
>
> Best regards,
>
> Philippe
>
>
>
> 2014-02-28 15:35 GMT+01:00 Michael Schmid <
[hidden email]>:
>
>>> I would like to exit from a synchronized while (image not updated)
>>> wait() (until the image is updated) loop when the image is not updated.
>>
>> Hi Philippe,
>>
>> it seems that you need some timeout, otherwise you can't know whether an
>> update is still to come. Maybe roughly like this:
>>
>> //class variables ('global')
>> ImagePlus theImageIamWaitingFor;
>> Thread waitingThread;
>>
>> public void imageUpdated(ImagePlus imp) {
>> if (imp == theImageIamWaitingFor && waitingThread != null)
>> waitingThread.interrupt();
>> }
>>
>> //main processing code
>> ...
>> waitingThread = Thread.currentThread();
>> theImageIamWaitingFor = ...
>> while (true) { //might be also while (!closed) etc.
>> //do some analysis on updated image
>> synchronized(this) {
>> //wait for image update, but no longer than 1000 millesec:
>> try {
>> wait(1000);
>> } catch (InterruptedException e) {
>> continue; //loop again after update
>> }
>> break; //timeout, leave the while loop
>> }
>> }
>>
>> Michael
>> ________________________________________________________________
>> On Feb 28, 2014, at 14:05, Philippe GENDRE wrote:
>>
>>> Dear List,
>>>
>>> I would like to exit from a synchronized while (image not updated)
>> wait()
>>> (until the image is updated) loop when the image is not updated.
>>>
>>> Is it possible and how to ?
>>>
>>> Thanks.
>>>
>>> Philippe
>>>
>>> --
>>> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html>>
>> --
>> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html>>
>
> --
> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html