The NPE comes from BasicStylePanel#findEquivalentItem()
Therefore it would vote for make this one more bullet proof.

See my new patch. I would leave BasicStyle#getFillPattern()
untouched.


Larry Becker schrieb:
> It seem to work when I modify getFillPattern in BasicStyle to include
> the check for null and then initialize the fillPattern as before.
> 
>     public Paint getFillPattern() {
>       if (fillPattern == null) {
>               fillPattern = WKTFillPattern.createDiagonalStripePattern(4,
>                           2, false, true);
>       }
>         return fillPattern;
>     }
> 
> The only side effect is that initially in the Change Styles Rendering
> Tab, the Fill pattern is 0 grey.  However when you check the Fill
> pattern check box, it turns solid black and works correctly so I don't
> see this as an issue.
> 
> regards,
> Larry
> 
> On 6/5/07, Larry Becker <[EMAIL PROTECTED]> wrote:
>> Sascha,
>>
>>    I implemented your changes in SkyJUMP to BasicStyle and
>> BasicStylePanel.  It worked when I opened a task with colour theming
>> already set up, but when I tried to add a new layer and chose Change
>> Styles, I got:
>>
>> java.lang.NullPointerException
>>         at 
>> com.vividsolutions.jump.workbench.ui.style.BasicStylePanel.findEquivalentItem(BasicStylePanel.java:483)
>>         at 
>> com.vividsolutions.jump.workbench.ui.style.BasicStylePanel.setBasicStyle(BasicStylePanel.java:459)
>>         at 
>> com.vividsolutions.jump.workbench.ui.style.RenderingStylePanel.<init>(RenderingStylePanel.java:189)
>>         at 
>> com.vividsolutions.jump.workbench.ui.style.ChangeStylesPlugIn.execute(ChangeStylesPlugIn.java:87)
>>
>> regards,
>> Larry
>>
>> On 6/5/07, Paul Austin <[EMAIL PROTECTED]> wrote:
>>> Sascha,
>>>
>>> In your comments you said you added an if statement but used the ?:
>>> operator, I think in this case a proper if {} else {} statement would be
>>> much more readable. I think that the ?: operator should be used
>>> minimally, for example if you were generating HTML and wanted to
>>> optionally include an attribute on a tag.
>>>
>>> +                fill = fill == null
>>> +                    ? fillPatternComboBox.getItemAt(0)
>>> +                    : findEquivalentItem(fill, fillPatternComboBox);
>>>
>>> BTW does this improvement only improve speed if you have a themed layer
>>> or will it speed up all layers?
>>>
>>> Paul
>>>
>>> -------------------------------------------------------------------------
>>> This SF.net email is sponsored by DB2 Express
>>> Download DB2 Express C - the FREE version of DB2 express and take
>>> control of your XML. No limits. Just data. Click to get it now.
>>> http://sourceforge.net/powerbar/db2/
>>> _______________________________________________
>>> Jump-pilot-devel mailing list
>>> Jump-pilot-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>
>>
>> --
>> http://amusingprogrammer.blogspot.com/
>>
> 
> 
Index: src/com/vividsolutions/jump/workbench/ui/style/BasicStylePanel.java
===================================================================
RCS file: 
/cvsroot/jump-pilot/openjump/src/com/vividsolutions/jump/workbench/ui/style/BasicStylePanel.java,v
retrieving revision 1.4
diff -u -r1.4 BasicStylePanel.java
--- src/com/vividsolutions/jump/workbench/ui/style/BasicStylePanel.java 13 May 
2007 13:24:55 -0000      1.4
+++ src/com/vividsolutions/jump/workbench/ui/style/BasicStylePanel.java 5 Jun 
2007 17:57:16 -0000
@@ -457,8 +457,12 @@
         //Because fillPatternComboBox is not editable, we must use 
findEquivalentItem,
         //otherwise the combobox gets confused and a stack overflow occurs
         //if the two items are equal but not == . [Jon Aquino]
-        fillPatternComboBox.setSelectedItem(findEquivalentItem(
-                basicStyle.getFillPattern(), fillPatternComboBox));
+
+                               Object fill = 
findEquivalentItem(basicStyle.getFillPattern(), fillPatternComboBox);
+
+                               if (fill != null)
+                                       
fillPatternComboBox.setSelectedItem(fill);
+
         updateControls();
     }
 
@@ -477,6 +481,16 @@
     }
 
     private Object findEquivalentItem(Object item, JComboBox comboBox) {
+
+                               if (comboBox == null)
+                                       return null;
+
+                               if (item == null) {
+                                       return comboBox.getItemCount() > 0
+                                               ? comboBox.getItemAt(0)
+                                               : null;
+                               }
+
         for (int i = 0; i < comboBox.getItemCount(); i++) {
             if (item.equals(comboBox.getItemAt(i))) {
                 return comboBox.getItemAt(i);
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to