Hi Yong,
Thanks for the report!
I might have found an interop issue with adjustable arrays. First create an
adjustable array with some "empty unfilled space".
(defparameter *arr* (let ((x (make-array 0 :fill-pointer 0 :adjustable t :element-type 'base-char))) (vector-push-extend #\a x) (vector-push-extend #\b x) (vector-push-extend #\c x) (vector-push-extend #\d x) x))
Pass the array into Java and copy it back into Lisp.
CL-USER> (jcall "getText" (jnew "javax.swing.JButton" *arr*)) "abcd^@^@^@" CL-USER> (jcall "getText" (jnew "javax.swing.JButton" (copy-seq *arr*))) "abcd"
I've hand edited the above -- the ^@ character is actually a #\Null of course.
I think you're right. Could you try this patch to see if that solves your issue:
Index: ComplexString.java =================================================================== --- ComplexString.java (revision 13405) +++ ComplexString.java (working copy) @@ -330,7 +330,7 @@ @Override public Object javaInstance() { - return new String(chars()); + return new String(getStringValue()); }
@Override
If it does, I'll commit and backport to 0.26.1.
More examples:
CL-USER> (jnew "java.lang.String" *arr*) #<java.lang.String abcd^@^@^@ {F10A53}>
Bye,
Erik.