Spanish [SOLUCIONADO] NumberFormat run .exe

RAFA BRAVO

Active Member
Licensed User
Longtime User
Si ejecuto el proyecto en debug o realese no tengo ningún error ni problema, obtengo los datos y los modifico como deseo, este es el log
Code: Copy
Waiting for debugger to connect...
Program started.
win: true
linux: false
11.64773
Name CPU: Intel Core i7-7700K
Temperature CPU Package: 51
Load CPU Total: 6.65%
Load Used Space: 13.09%
RPM Fan: 1097

Los valores con % están tratados para obtener un string con 2 decimales:
Code: Copy
Dim loadDISCK As String
Dim loadDISCK2 As Double
Dim sdataM As SensorData = firstDISKs.Sensors.Loads.Get(d)
loadDISCK = sdataM.Value
nameDsisk = sdataM.Name
loadDISCK2 = loadDISCK
loadDISCK = NumberFormat(loadDISCK2,0,2)
loadDISCK2 = loadDISCK

El problema viene cuando creo un paquete independiente con B4XPackager11 (.exe), el programa se cierra, este el registro:
Code: Copy
C:\Users\rafab\OneDrive\Escritorio\PROYECTO SENSORES PC\MONITORIZACION PC\Objects\temp\build>cd bin

C:\Users\rafab\OneDrive\Escritorio\PROYECTO SENSORES PC\MONITORIZACION PC\Objects\temp\build\bin>java.exe @release_java_modules.txt  -m b4j/b4j.monitorizar.main
[JavaFX Application Thread] WARN com.profesorfalken.jsensors.JSensors - You have not executed jSensors in Administrator mode, so CPU temperature sensors will not be detected.
win: true
linux: false
1350756
main$ResumableSub_controlLoad.resume (java line: -1)
java.lang.NumberFormatException: For input string: "1,350,756"
        at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(Unknown Source)
        at java.base/jdk.internal.math.FloatingDecimal.parseDouble(Unknown Source)
        at java.base/java.lang.Double.parseDouble(Unknown Source)
        at b4j/b4j.monitorizar.main$ResumableSub_controlLoad.resume(Unknown Source)
        at b4j/b4j.monitorizar.main._controlload(Unknown Source)
        at b4j/b4j.monitorizar.main$ResumableSub_CPU_FetchComplete.resume(Unknown Source)
        at b4j/anywheresoftware.b4a.BA.checkAndRunWaitForEvent(Unknown Source)
        at b4j/anywheresoftware.b4a.BA.raiseEvent2(Unknown Source)
        at b4j/anywheresoftware.b4a.BA.raiseEvent(Unknown Source)
        at b4j/anywheresoftware.b4a.keywords.Common$3.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)


C:\Users\rafab\OneDrive\Escritorio\PROYECTO SENSORES PC\MONITORIZACION PC\Objects\temp\build\bin>pause
Presione una tecla para continuar . . .
como puedo hacerlo?
 
Last edited:
He modificado a numberFormat2 ya no arroja error, pero no funciona, este es el código:
Code: Copy
Dim loadDISCK2 As Double
Dim loadDISCK As String
Dim sdataM As SensorData = firstDISKs.Sensors.Loads.Get(d)
loadDISCK = sdataM.Value
nameDsisk = sdataM.Name
loadDISCK2 = loadDISCK
Log("Int: " & loadDISCK2)
Log("String: " & loadDISCK)
loadDISCK = NumberFormat2(loadDISCK2,0,2,0,False)
loadDISCK2 = loadDISCK
Log("Int: " & loadDISCK2)
Log("String: " & loadDISCK)
B4X: Copy
Hago log de las variables antes y después de numberFormat2 para que se vea la intención, Log en debug y release:
Code: Copy
Waiting for debugger to connect...
Program started.
win: true
linux: false
Int: 13.06133
String: 13.06133
Int: 13.06
String: 13.06
Name CPU: Intel Core i7-7700K
Temperature CPU Package: 53
Load CPU Total: 10.5%
Load Used Space: 13.06%
RPM Fan: 1101
Log paquete independiente:
B4X: Copy
C:\Users\rafab\OneDrive\Escritorio\PROYECTO SENSORES PC\MONITORIZACION PC\Objects\temp\build>cd bin

C:\Users\rafab\OneDrive\Escritorio\PROYECTO SENSORES PC\MONITORIZACION PC\Objects\temp\build\bin>java.exe @release_java_modules.txt  -m b4j/b4j.monitorizar.main
[JavaFX Application Thread] WARN com.profesorfalken.jsensors.JSensors - You have not executed jSensors in Administrator mode, so CPU temperature sensors will not be detected.
win: true
linux: false
Int: 1305771
String: 1305771
Int: 1305771
String: 1305771
Name CPU: Intel Core i7-7700K
Temperature CPU Package: 37
Load CPU Total: 1161371%
Load Used Space: 1305771%
RPM Fan: 0
numberFormat2 no trabaja en .exe, porque?
 
Last edited:
Estos números diferentes me hacen preguntarme si tiene algo que ver con el análisis regional de las comas y los puntos en los números.

Si las comas son el separador decimal y los puntos son el separador de agrupación de miles, entonces eso explicaría por qué el análisis sintáctico de números se atraganta con las dos comas en 1,350,756 y por qué el punto es ignorado y el valor 13.05771 aparece como 1305771.

Tal vez la configuración regional es diferente cuando el programa se inicia desde una línea de comandos shell vs iniciado desde B4X IDE.

Code: Copy
main$ResumableSub_controlLoad.resume (java line: -1)
java.lang.NumberFormatException: For input string: "1,350,756"
        at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(Unknown Source)
        at java.base/jdk.internal.math.FloatingDecimal.parseDouble(Unknown Source)
        at java.base/java.lang.Double.parseDouble(Unknown Source)
Code: Copy
Int: 13.06133
String: 13.06133
Int: 13.06
String: 13.06
B4X: Copy
Int: 1305771
String: 1305771
Int: 1305771
String: 1305771
 
Last edited:
Alguna manera de poder configurar el separador decimal para adaptarme al análisis decimal de sistema operativo? Quizás utilizar B4XFormatter, en vez de numberFormat?
 
Back
Top