...

> I am encountering this problem right now in a different form.  I am
> constructing an asynchronous callback function inside Java using a TclList
> object, {command_name java_obj_1 java_obj_2}.  The list contains some Java
> objects, which are the arguments to the callback function.  However, when
> the callback function is invoked, the function is getting the string
> representation of the argument rather than the real Java objects.  This is
> not good because you can't easily find your Java object given a string
> representation.

You mentioned that doing an after with a list object solved the problem, 
but here you are using a TclList so it should incr the ref counts of
the objects in the list. Seems like that should work, I guess I
do not understand why your method arguments would be getting converted
to strings instead of TclObjects. Is this something that Interp.eval()
is doing?

> I wonder if similar problem happens in the C world.  But a C object can
> always use a pointer address as its string representation.  Then, given the
> string representation, a valid C object can be found.

The problem is the mixing of GC and a type that can not be converted to
a string. You can not convert a Java reference into a string because
the GC system does not see that as a valid reference. You could convert
a C pointer into a string and then back to a pointer but you would
need to manage that memory on your own. In fact, Tcl Blend does this
sort of thing behind the scenes, it stores a C pointer inside a Java
long. It then converts this back to a pointer that is uses to find
the actual object (yes it is scary and wrong, but JNI sucks so we
are stuck with it).

Also, that convert a pointer to a string and back again trick
would not work if you were using a GC for your C code.

Mo DeJong
Red Hat Inc

----------------------------------------------------------------
The TclJava mailing list is sponsored by Scriptics Corporation.
To subscribe:    send mail to [EMAIL PROTECTED]  
                 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
                 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
An archive is available at http://www.mail-archive.com/tcljava@scriptics.com

Reply via email to