From 297eb795b24ec31f6599f48bc8c3769557a7ec6f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 5 Aug 2018 12:32:42 +0800 Subject: Bump java lib versions to 13 Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'altoslib/AltosJson.java') diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 52c9b41e..190d2633 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_13; import java.io.*; import java.util.*; -- cgit v1.2.3 From 173e72429fb494ea3832e3e38ee90f165fbff4cf Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 7 Oct 2018 14:49:48 -0600 Subject: altoslib: NumberFormat can't be shared between parsers AltosJson uses NumberFormat to ensure locale-independent parsing of values. However, NumberFormat appears to have some internal state which means that each thread needs to have an independent NumberFormat object. Create one for each parser as needed. Signed-off-by: Keith Packard --- altoslib/AltosJson.java | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'altoslib/AltosJson.java') diff --git a/altoslib/AltosJson.java b/altoslib/AltosJson.java index 190d2633..b981c365 100644 --- a/altoslib/AltosJson.java +++ b/altoslib/AltosJson.java @@ -63,18 +63,22 @@ class JsonUtil { result.append("\t"); return result; } - static NumberFormat get_nf_json() { - DecimalFormat nf = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ROOT); - nf.setParseIntegerOnly(false); - nf.setGroupingUsed(false); - nf.setMaximumFractionDigits(17); - nf.setMinimumFractionDigits(0); - nf.setMinimumIntegerDigits(1); - nf.setDecimalSeparatorAlwaysShown(false); - return nf; - } - - static NumberFormat nf_json = get_nf_json(); + + NumberFormat _nf_json; + + NumberFormat nf_json() { + if (_nf_json == null) { + DecimalFormat nf = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ROOT); + nf.setParseIntegerOnly(false); + nf.setGroupingUsed(false); + nf.setMaximumFractionDigits(17); + nf.setMinimumFractionDigits(0); + nf.setMinimumIntegerDigits(1); + nf.setDecimalSeparatorAlwaysShown(false); + _nf_json = nf; + } + return _nf_json; + } } class JsonHash extends JsonUtil { @@ -372,7 +376,7 @@ class JsonLexer extends JsonUtil { String dstr = dbuf.toString(); double dval; try { - dval = nf_json.parse(dstr).doubleValue(); + dval = nf_json().parse(dstr).doubleValue(); } catch (ParseException pe) { return new JsonToken(JsonToken._error, dstr); } @@ -612,7 +616,7 @@ public class AltosJson extends JsonUtil { } else if (Double.isNaN(d_number)) { result.append("NaN"); } else { - String dval = nf_json.format(d_number); + String dval = nf_json().format(d_number); if (dval.equals("-0")) dval = "0"; result.append(dval); -- cgit v1.2.3