From fbcf55aa63a3dd61434d03691550771480e98e61 Mon Sep 17 00:00:00 2001 From: Joachim Klein Date: Wed, 7 Mar 2018 19:41:07 +0100 Subject: [PATCH] GUI renderers/editors: Move from static allocation to allocation on first use Currently, most of the Setting classes construct a SettingRenderer and SettingEditor statically, for use in the GUI. When running PRISM from the command-line (PrismCL), we make sure to run Java in headless mode and generally those calls then don't matter. If there are problems with the AWT configuration, there can be exceptions even for PrismCL. So, here, we switch from static allocation on class loading to static allocation on first use of getSettingsEditor() and getSettingsRenderer(). --- prism/src/settings/BooleanSetting.java | 15 ++++++------ prism/src/settings/ChoiceSetting.java | 24 ++++++++++--------- prism/src/settings/ColorSetting.java | 14 +++++------ prism/src/settings/DoubleSetting.java | 15 ++++++------ prism/src/settings/FontColorSetting.java | 15 ++++++------ prism/src/settings/IntegerSetting.java | 15 ++++++------ prism/src/settings/LongSetting.java | 15 ++++++------ .../settings/MultipleLineStringSetting.java | 15 ++++++------ .../src/settings/SingleLineStringSetting.java | 14 +++++------ 9 files changed, 68 insertions(+), 74 deletions(-) diff --git a/prism/src/settings/BooleanSetting.java b/prism/src/settings/BooleanSetting.java index 9150a55e..efb97a41 100644 --- a/prism/src/settings/BooleanSetting.java +++ b/prism/src/settings/BooleanSetting.java @@ -30,14 +30,7 @@ public class BooleanSetting extends Setting { private static BooleanRenderer renderer; private static BooleanEditor editor; - - static - { - renderer = new BooleanRenderer(); - editor = new BooleanEditor(); - } - - + /** Creates a new instance of BooleanSetting */ public BooleanSetting(String name, Boolean value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -51,11 +44,17 @@ public class BooleanSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new BooleanEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new BooleanRenderer(); + } return renderer; } diff --git a/prism/src/settings/ChoiceSetting.java b/prism/src/settings/ChoiceSetting.java index dd180164..41c65a38 100644 --- a/prism/src/settings/ChoiceSetting.java +++ b/prism/src/settings/ChoiceSetting.java @@ -29,29 +29,25 @@ package settings; public class ChoiceSetting extends Setting { private static ChoiceRenderer renderer; - - - static - { - renderer = new ChoiceRenderer(); - } - - + private String[]values; - private ChoiceEditor editor; //editor is not static, we need one editor for each object + /** + * Editor for these settings. + * It is not static, as we need one editor for each object. + * Delayed allocation on first use, so we don't allocate on headless use. + */ + private ChoiceEditor editor; /** Creates a new instance of ChoiceSetting */ public ChoiceSetting(String name, String[]values, String value, String comment, SettingOwner owner, boolean editableWhenMultiple) { super(name, value, comment, owner, editableWhenMultiple); - editor = new ChoiceEditor(values); this.values = values; } public ChoiceSetting(String name, String[]values, String value, String comment, SettingOwner owner, boolean editableWhenMultiple, StringConstraint constraint) { super(name, value, comment, owner, editableWhenMultiple, constraint); - editor = new ChoiceEditor(values); this.values = values; } @@ -72,11 +68,17 @@ public class ChoiceSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new ChoiceEditor(values); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new ChoiceRenderer(); + } return renderer; } diff --git a/prism/src/settings/ColorSetting.java b/prism/src/settings/ColorSetting.java index f5c7a98e..bce285a3 100644 --- a/prism/src/settings/ColorSetting.java +++ b/prism/src/settings/ColorSetting.java @@ -33,13 +33,7 @@ public class ColorSetting extends Setting { private static ColorRenderer renderer; private static ColorEditor editor; - - static - { - renderer = new ColorRenderer(); - editor = new ColorEditor(); - } - + /** Creates a new instance of ColorSetting */ public ColorSetting(String name, Color value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -54,11 +48,17 @@ public class ColorSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new ColorEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new ColorRenderer(); + } return renderer; } diff --git a/prism/src/settings/DoubleSetting.java b/prism/src/settings/DoubleSetting.java index a2685b52..4f3ccc18 100644 --- a/prism/src/settings/DoubleSetting.java +++ b/prism/src/settings/DoubleSetting.java @@ -30,14 +30,7 @@ public class DoubleSetting extends Setting { private static DoubleRenderer renderer; private static DoubleEditor editor; - - static - { - renderer = new DoubleRenderer(); - editor = new DoubleEditor(); - } - - + /** Creates a new instance of DoubleSetting */ public DoubleSetting(String name, Double value, String comment, SettingOwner owner, boolean editableWhenMultiple, NumericConstraint constraint) { @@ -51,11 +44,17 @@ public class DoubleSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new DoubleEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new DoubleRenderer(); + } return renderer; } diff --git a/prism/src/settings/FontColorSetting.java b/prism/src/settings/FontColorSetting.java index 525e26fb..96b53022 100644 --- a/prism/src/settings/FontColorSetting.java +++ b/prism/src/settings/FontColorSetting.java @@ -33,14 +33,7 @@ public class FontColorSetting extends Setting { private static FontColorRenderer renderer; private static FontColorEditor editor; - - static - { - renderer = new FontColorRenderer(); - editor = new FontColorEditor(); - } - - + /** Creates a new instance of FontColorSetting */ public FontColorSetting(String name, FontColorPair value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -54,11 +47,17 @@ public class FontColorSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new FontColorEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new FontColorRenderer(); + } return renderer; } diff --git a/prism/src/settings/IntegerSetting.java b/prism/src/settings/IntegerSetting.java index 1fec6327..e28ed4ad 100644 --- a/prism/src/settings/IntegerSetting.java +++ b/prism/src/settings/IntegerSetting.java @@ -30,14 +30,7 @@ public class IntegerSetting extends Setting { private static IntegerRenderer renderer; private static IntegerEditor editor; - - static - { - renderer = new IntegerRenderer(); - editor = new IntegerEditor(); - } - - + /** Creates a new instance of DoubleSetting */ public IntegerSetting(String name, Integer value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -51,11 +44,17 @@ public class IntegerSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new IntegerEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new IntegerRenderer(); + } return renderer; } diff --git a/prism/src/settings/LongSetting.java b/prism/src/settings/LongSetting.java index 3cceb0f1..d3eec188 100644 --- a/prism/src/settings/LongSetting.java +++ b/prism/src/settings/LongSetting.java @@ -30,14 +30,7 @@ public class LongSetting extends Setting { private static LongRenderer renderer; private static LongEditor editor; - - static - { - renderer = new LongRenderer(); - editor = new LongEditor(); - } - - + /** Creates a new instance of LongSetting */ public LongSetting(String name, Long value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -51,11 +44,17 @@ public class LongSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new LongEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new LongRenderer(); + } return renderer; } diff --git a/prism/src/settings/MultipleLineStringSetting.java b/prism/src/settings/MultipleLineStringSetting.java index 7bfa33cf..229c3c97 100644 --- a/prism/src/settings/MultipleLineStringSetting.java +++ b/prism/src/settings/MultipleLineStringSetting.java @@ -30,14 +30,7 @@ public class MultipleLineStringSetting extends Setting { private static MultipleLineStringRenderer renderer; private static MultipleLineStringEditor editor; - - static - { - renderer = new MultipleLineStringRenderer(); - editor = new MultipleLineStringEditor(); - } - - + /** Creates a new instance of MultipleLineStringSetting */ public MultipleLineStringSetting(String name, String value, String comment, SettingOwner owner, boolean editableWhenMultiple) { @@ -51,11 +44,17 @@ public class MultipleLineStringSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new MultipleLineStringEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new MultipleLineStringRenderer(); + } return renderer; } diff --git a/prism/src/settings/SingleLineStringSetting.java b/prism/src/settings/SingleLineStringSetting.java index d846bb31..5a56f513 100644 --- a/prism/src/settings/SingleLineStringSetting.java +++ b/prism/src/settings/SingleLineStringSetting.java @@ -31,14 +31,6 @@ public class SingleLineStringSetting extends Setting private static SingleLineStringRenderer renderer; private static SingleLineStringEditor editor; - static - { - renderer = new SingleLineStringRenderer(); - editor = new SingleLineStringEditor(); - } - - - /** Creates a new instance of SingleLineStringSetting */ public SingleLineStringSetting(String name, String value, String comment, SettingOwner owner, boolean editableWhenMultiple, StringConstraint constraint) { @@ -52,11 +44,17 @@ public class SingleLineStringSetting extends Setting public SettingEditor getSettingEditor() { + if (editor == null) { + editor = new SingleLineStringEditor(); + } return editor; } public SettingRenderer getSettingRenderer() { + if (renderer == null) { + renderer = new SingleLineStringRenderer(); + } return renderer; }