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
Log:
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:
B4X:
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:
Log:
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:

RAFA BRAVO

Active Member
Licensed User
Longtime User
He modificado a numberFormat2 ya no arroja error, pero no funciona, este es el código:
B4X:
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:
Hago log de las variables antes y después de numberFormat2 para que se vea la intención, Log en debug y release:
Log:
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:
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:

emexes

Expert
Licensed User
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.

Log:
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)
B4X:
Int: 13.06133
String: 13.06133
Int: 13.06
String: 13.06
B4X:
Int: 1305771
String: 1305771
Int: 1305771
String: 1305771
 
Last edited:

RAFA BRAVO

Active Member
Licensed User
Longtime User
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?
 

RAFA BRAVO

Active Member
Licensed User
Longtime User
Estabas en lo cierto cambie el símbolo decimal del sistema y trabajo bien, este era el problema.
Posiblemente relacionado, podría ser una solución:
Si, el punto 12 soluciona el problema. Muchas gracias.
 
Top