raeleus/skin-composer

TextraTypist Playground: Failed to parse number values (effect settings)

Closed this issue · 1 comments

Got following exception when try to play with effects

java.lang.RuntimeException: Actor: ImageButton: tt-button-up
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:192)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:152)
	at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:125)
	at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:93)
	at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88)
	at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:71)
	at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:355)
	at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:70)
	at com.badlogic.gdx.backends.lwjgl3.DefaultLwjgl3Input.update(DefaultLwjgl3Input.java:189)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:378)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:192)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:166)
	at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:484)
Caused by: java.lang.NumberFormatException: For input string: "1,0"
	at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
	at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
	at java.base/java.lang.Float.parseFloat(Float.java:455)
	at com.ray3k.skincomposer.dialog.textratypist.PopTextraEffects.lambda$createNumberField$27(PopTextraEffects.java:942)
	at com.ray3k.skincomposer.utils.Utils$1.changed(Utils.java:573)
	at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:188)
	... 12 more

In my locale delimeter for floating point is ',' instead of '.'
Simple code snippet:

    public static void main(String[] args) {
        System.out.println("Default (current locale) " + Locale.getDefault().getCountry());
        System.out.println("Set DE locale - also have ',' as floating point delimeter (as example)");
        Locale.setDefault(Locale.GERMANY);
        String formattedNumber = String.format("%.1f", .1f);
        System.out.println("Formatting 0.1 (locale dependent) -> " + formattedNumber);
        System.out.println("Parsing locale dependent formatted floating number [" + formattedNumber + "] using default floating point parser");
        System.out.println(Float.parseFloat(formattedNumber));
    }

gave me following output:

Default (current locale) RU
Set DE locale - also have ',' as floating point delimeter (as example)
Formatting 0.1 (locale dependent) -> 0,1
Parsing locale dependent formatted floating number [0,1] using default floating point parser
Exception in thread "main" java.lang.NumberFormatException: For input string: "0,1"
	at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
	at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
	at java.base/java.lang.Float.parseFloat(Float.java:455)
	at [REDACTED]

Possible quick solution: specify Locale.US when formatting floating numbers for number fields

Version: 52

Thanks for the PR!