Hi,

I am using Java SDK 2 on Redhat 6.0.  I have
a Java GUI on a C++ library and have hit the
following problem.

The GUI includes a component like this for
displaying images,

class DisplayPanel extends JPanel 
{
  public void paintComponent (Graphics g) 
    {
        super. paintComponent (g); // paint background

        // route 1

        g. drawImage (image, 0, 0, this);

        ... OR ...

        // route 2

        _interface_to_c++. display_image (g, this);
    }
}

If I use route 1, everything is fine, the
image is displayed whenever it is required.

Route 2 involves a call to a C++ routine, which
takes an image from memory, wraps it up in the
required Java format (using MemoryImageSource),
then does a drawImage.  However, the following
problem occurs -

paintComponent is invoked in the usual way,
it calls the C++ routine, the image is
displayed (correctly), the processing terminates,
but then something causes paintComponent
to be invoked again.  It goes into a loop
in which paintComponent is repeatedly invoked,
and the C++ routine is continually drawing
the image.

Well the basic logic is ok on the Java side because
route 1 works fine.  So something in the C++ routine
causes Java to think the DiplayPanel component
needs to be updated.  And it all hinges on the
call to drawImage from C++ (if I remove that,
no looping).  

I almost began to think it's a bug, that you can't use
the JNI when displaying images.  Any thoughts?

Thanks,
Paul.

p.s. I tried things like "markCompletelyClean" on the component 
after return from C++ to try to disable the repaint but no luck.

---------------------------------------------------------------------------
Paul Beardsley                                          email: [EMAIL PROTECTED]
MERL - A Mitsubishi Electric Research Laboratory,      tel: +(617) 621 7569   
201 Broadway, Cambridge, MA 02139, USA                 fax: +(617) 621 7550


----------------------------------------------------------------------
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to