Re: Strange NullPointerException
[email protected] Fri, 27 May 2005 11:06:48 -0700
| Newsgroups | gmane.comp.embedded.carlsbad-cubes |
|---|---|
| Message-ID | <[email protected]> |
Vitali,
You are absolutely correct, it can be a design restriction to give
all those fields that Swixml should automatically map public access.
Remember how the SwingEngine does this:
While parsing your XML layout descriptor, the SwingEngine
instantiates all the JCompontents and Wigets and assembles the GUI tree.
In case you provided tag in the XML descriptor with an id attribute,
the SwingEngine will also put a reference to the instantiated Object
into a so-called idmap. After all this is done, the SwingEngine tries
to introspect the class of the client object you provided when
setting-up the SwingEngine.
If during this introspection public Members are found whose names
match those in the idmap, the SwingEngine maps the reference into the
Member variable. This however, can only be done for public members.
If this becomes a concern - and it sometimes really can - then you
can just do the mapping yourself, inside the client class, where you
don't have to consider just public members anymore.
The SwingEngine gives you access to the idmap.:
Map getIdMap()
Returns the id map, containing all id-ed parsed GUI
components.
For convenience, there is also the getIdComponentIterator:
Iterator getIdComponentItertor()
Returns an Iterator for id-ed parsed GUI components.
and in case you just need to map a few known ids, you can simply use
the find method:
Component find(String id)
Returns the UI component with the given name or null.
--
Wolf Paulus
707.202.3937
[email protected]
C a r l s b a d C u b e s
Dedicated to Excellence
CONFIDENTIALITY NOTICE:
This message is intended only for the use of the individual or entity
to which it is addressed, and may contain information that is
privileged, confidential and exempt from disclosure under applicable
law. If you are not the intended recipient, please contact the sender
by reply email and destroy all copies of the original message.
On May 27, 2005, at 1:58 AM, [email protected] wrote:
> Hi,
>
> I think this is quite a serious design restriction that swixml
> requires
> client's fields to be public. This make them unnecessarily accessible
> from other parts of application so they can be unintentionally
> modified.
>
> Though this is very easy to fix. SwingEngine.mapMembers method has
> to be modified something like this
>
> -Field[] flds = obj.getClass().getFields();
> +Field[] flds = obj.getClass().getDeclaredFields();
> +AccessibleObject.setAccessible(flds, true);
>
> Thanks,
>
> Vitali.
> Sorry if this message appears twice. The original message was not
> posted somehow.
>
>
>> Hey Frank,
>>
>> I have solved the problem. It occured because I declared my Swing
>> Components 'private' and therefore the automatic initialization by
>> the SwixEngine did not work. I accidentally realized this, when
>> looking through some of the examples.
>>
>> I think this should be put in the documentation somewhere.
>>
>> Thanks so far. :)
>>
>> Sebastian
>>
>> <[email protected]> schrieb im Newsbeitrag news:
>> [email protected]...
>>
>>> [email protected] wrote:
>>>
>>>> I cannot understand this, because the documention says, that the
>>>> gui components are initialized automatically.
>>>>
>>>
>>> Sebastian,
>>>
>>> please post your xml code to allow any diagnosis...
>>>
>>> Frank
>>>
>>
>>
>>
>>
>> _______________________________________________
>> Forum mailing list
>> [email protected]
>> http://carlsbadcubes.com/mailman/listinfo/forum_carlsbadcubes.com
>>
>
> ---
> Автоцентр MAZDA и Музей современного
> изобразительного искусства
> приглашают посетить уникальную
> экспозицию "MAZDA-шедевр" http://www.mazda.by/know/
> news/~id=13~page=1
>
> _______________________________________________
> Forum mailing list
> [email protected]
> http://carlsbadcubes.com/mailman/listinfo/forum_carlsbadcubes.com
>