EditComponentValue()
-
- Posts: 146
- Joined: Sun Jan 22, 2023 5:18 am
- Location: Melbourne
- Contact:
EditComponentValue()
I have a knob which is used to set a MIDI note. It's range is 0-127 but I have used GetTooltipText() to display the value as a MIDI note name - C5, F#-1 etc..
When the user chooses to manually edit that value I call EditComponentValue() and the new text is passed in the String newText. I use that to generate the note number to change the knob value.
This all works fine but it also throws a NumberFormatException, presumably because the underlying VM code is trying to turn the text into a double to also pass into the function.
Am I doing something wrong or is this a bug/oversight in VM?
I think I can just ignore the exception but my OCD mind is not comfortable with that.
Any suggestions?
Peter
When the user chooses to manually edit that value I call EditComponentValue() and the new text is passed in the String newText. I use that to generate the note number to change the knob value.
This all works fine but it also throws a NumberFormatException, presumably because the underlying VM code is trying to turn the text into a double to also pass into the function.
Am I doing something wrong or is this a bug/oversight in VM?
I think I can just ignore the exception but my OCD mind is not comfortable with that.
Any suggestions?
Peter
- honki-bobo
- Posts: 310
- Joined: Sat Nov 09, 2019 1:18 pm
Re: EditComponentValue()
Hi Peter,
Best regards,
Martin
I would also assume this, but it's hard to tell what's happening without any code. If you could post the code of your EditComponentValue() it would be easier to analyze.Centripidity wrote: ↑Sun Feb 05, 2023 6:13 am This all works fine but it also throws a NumberFormatException, presumably because the underlying VM code is trying to turn the text into a double to also pass into the function.
Best regards,
Martin
Re: EditComponentValue()
My guess would be that the exception is being thrown by your code handling the note name to value conversion rather than VM.
I pass the original text on to super.EditComponentValue() so VM must just use the newValue parameter for the new value rather than attempting to parse newText itself.
Here's an example...
I pass the original text on to super.EditComponentValue() so VM must just use the newValue parameter for the new value rather than attempting to parse newText itself.
Here's an example...
Code: Select all
@Override
public void EditComponentValue( VoltageComponent component, double newValue, String newText )
{
// add your own code here
i( component == yourKnob )
newValue = yourStringToValueParser( newText );
super.EditComponentValue( component, newValue, newText );
}
-
- Posts: 146
- Joined: Sun Jan 22, 2023 5:18 am
- Location: Melbourne
- Contact:
Re: EditComponentValue()
The exception gets thrown even if there is no user code in the EditComponentValue() function.honki-bobo wrote: ↑Sun Feb 05, 2023 10:05 am I would also assume this, but it's hard to tell what's happening without any code. If you could post the code of your EditComponentValue() it would be easier to analyze.
Try right clicking on any knob and enter a text (non-numeric) string. When you hit enter, EditComponetValue() is called, the text you typed is passed in as the newText argument, and it immediately throws the exception NumberFormatException on the string you entered. Of course, you only notice the exception if you’re running in the debugger, it doesn't seem to interfere with the module's operation.
If I add code to convert the text to a MIDI note number and pass it as the newValue to Super the knob value changes as expected.
Re: EditComponentValue()
You are correct Peter. It looks like the VM code that calls EditComponentValue() simply uses a Double.parseDouble() on the Edit Value string and doesn't catch the exception.
Well spotted.
Well spotted.
-
- Posts: 146
- Joined: Sun Jan 22, 2023 5:18 am
- Location: Melbourne
- Contact:
Re: EditComponentValue()
Is there a place to log this as a possible bug?
Re: EditComponentValue()
BTW I've just looked at my own code and I've made exactly the same mistake with Double.parseDouble(). I tested it but obviously not in debug mode so never noticed the problem. I probably just assumed that it returned zero rather than checking the Java docs. But clearly it doesn't return zero but throws an exception.
A lesson learned. Thank you.
A lesson learned. Thank you.
Re: EditComponentValue()
I've just got a similiar problem with integer conversion. I could fix that exception error this way:
Code: Select all
int sToInt( String txt )
{
int xValue;
try { xValue = Integer.valueOf( txt ); }
catch ( NumberFormatException exc ) { xValue = 0; }
return xValue;
}
-
- Posts: 146
- Joined: Sun Jan 22, 2023 5:18 am
- Location: Melbourne
- Contact:
Re: EditComponentValue()
The problem here is that the exception is not being thrown by my code but within voltage itself so I don't think there is anyway for me to intervene before it happens.
I tried an experiment. I opened Voltage itself, edited a knob value with a text string, "ret" in this case, and when I looked in the Voltage log, it throws the same exception.
19:47:36.550 java.lang.NumberFormatException: For input string: "ret"
java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
java.base/java.lang.Double.parseDouble(Double.java:651)
voltage.core.Values.ParseStringToDouble(Unknown Source)
I tried an experiment. I opened Voltage itself, edited a knob value with a text string, "ret" in this case, and when I looked in the Voltage log, it throws the same exception.
19:47:36.550 java.lang.NumberFormatException: For input string: "ret"
java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
java.base/java.lang.Double.parseDouble(Double.java:651)
voltage.core.Values.ParseStringToDouble(Unknown Source)