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