exception cannot call getImage() from Thread: AWT-EventQueue-1

Curtis Rueden ctrueden at wisc.edu
Mon May 1 11:49:46 MDT 2006


Hi Nihat,

There are restrictions on calling DisplayImpl.getImage from the AWT 
event thread, because doing so generally results in thread deadlock. 
Instead, try calling getImage from a completely separate thread. E.g.:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    new Thread() {
        public void run() {
            com.app.lt.CreateImage imagePr = new com.app.lt.CreateImage();
            try {
                BufferedImage myImage =imagePr.plotImage();
            } catch (RemoteException ex) {
                ex.printStackTrace();
            } catch (VisADException ex) {
                ex.printStackTrace();
            }
        }
    }.start();
    ...
}

Also, I'm not certain what com.app.lt.CreateImage.plotImage does, but 
from its name, it sounds like it builds or updates a display with 
DataReferenceImpl.setData and such -- is there a reason such a method 
would need to call getImage? If you can avoid the getImage call, you can 
continue using the AWT event thread, if you wish.

-Curtis

ncubukcu wrote:

> Hi
> I am pretty new to visad and currently exploring its usage for my 
> applications. So far I was able to write some simple applications.
>
> I have run into a problem when I tried to call a visad application 
> through and applet's "submit" button on a web site  as in the 
> following format:
>
> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
> {                                                  
> Util.invoke(false,false, new Runnable() {
>            public void run() {
>            com.app.lt.CreateImage imagePr = new com.app.lt.CreateImage();
>                try {
>                    BufferedImage myImage =imagePr.plotImage();
>                } catch (RemoteException ex) {
>                    ex.printStackTrace();
>                } catch (VisADException ex) {
>                    ex.printStackTrace();
>                }
>            }
>        });
> .
> .
>
> the exception I get is;
>
> Exception in thread "AWT-EventQueue-1" visad.VisADError: cannot call 
> getImage() from Thread: AWT-EventQueue-1
>        at visad.DisplayImpl.getImage(DisplayImpl.java:2630)
>        at visad.DisplayImpl.getImage(DisplayImpl.java:2614)
>        at com.app.lt.CreateImage.plotImage(CreateImage.java:94)
>
> where line 94 has the following code;
> return display.getImage();
>
> and display object is;
> DisplayImplJ2D display = new DisplayImplJ2D(" ", 700, 500);
>
> I looked through old e.mails and it seems like this  works for 
> everybody else. It works fine if I run the application by itself. Like 
> I said I am  a new user and there maybe much easier way to do this but 
> I just don't know yet.  any help is greatly appreciated... thanks in 
> advance..
> nihat


==============================================================================
To unsubscribe visad, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
==============================================================================



More information about the visad mailing list