This one is driving me nuts!
An app I am using to test the beta has developed a strange issue when it does anything that accesses the main form but only in Debug mode, in release it runs fine.
Layouts load fine to the rootpane, but I am managing the form size, and trying to set it using:
Gives me the error:
The map has valid values as you can see from the log.
If I bypass this code, I also get a different error when calling an fx.MsgBox elsewhere in the app:
I did have a custom icon set on the form, which I have removed after seeing this message for the first time but it made no difference.
I have tried:
Error from the second Log(MainForm.Height)
These errors only occur in Debug mode, I am wondering if it may be a memory issue, but that's not what the logs say. The project is a reasonable size, but I wouldn't say it's huge. It does use a few libraries, but not really any more than my usual projects.
I can't easily try putting it into v4 as it is using a Custom View.
I can't get it to fail in a simple project, but I'm out of ideas where to look.
An app I am using to test the beta has developed a strange issue when it does anything that accesses the main form but only in Debug mode, in release it runs fine.
Layouts load fine to the rootpane, but I am managing the form size, and trying to set it using:
B4X:
MainForm.WindowLeft = ScreenMetrics.GetDefault("left",10.0)
MainForm.WindowTop = ScreenMetrics.GetDefault("top",10.0)
MainForm.WindowWidth = ScreenMetrics.GetDefault("width",400.0)
MainForm.WindowHeight = ScreenMetrics.GetDefault("height",300.0)
Gives me the error:
B4X:
Program started.
(MyMap) {height=639.0, spRightVdiv=0.5, width=816.0, left=432.0, top=124.0, spMainHdiv=0.5}
Error occurred on line: 116 (Main)
java.lang.NullPointerException
at anywheresoftware.b4j.objects.Form.setWindowLeft(Form.java:152)
at com.stevel05.snippetmanager.main._applyscreenmetrics(main.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:606)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:225)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:93)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:90)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:84)
at com.stevel05.snippetmanager.main.start(main.java:36)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
The map has valid values as you can see from the log.
If I bypass this code, I also get a different error when calling an fx.MsgBox elsewhere in the app:
B4X:
Program started.
Error occurred on line: 774 (Main)
java.lang.NullPointerException
at anywheresoftware.b4j.objects.Form.getIcon(Form.java:279)
at anywheresoftware.b4j.objects.JFX.setOwnerAndIcon(JFX.java:124)
at anywheresoftware.b4j.objects.JFX.Msgbox2(JFX.java:168)
at com.stevel05.snippetmanager.main._clearsnippet(main.java:720)
at com.stevel05.snippetmanager.main._btnclearsnippet_action(main.java:756)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:606)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:228)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:158)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:93)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:90)
at anywheresoftware.b4a.BA$2.run(BA.java:165)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
I did have a custom icon set on the form, which I have removed after seeing this message for the first time but it made no difference.
I have tried:
- Cleaning the project
- Closing and reopening the IDE
- Creating a new project and copying all the modules across.
- Reinstalling B4j into an empty directory.
- Moved the Window update to a callsubdelayed from the Appstart sub
B4X:
Log(MainForm.Height)
'At the end of AppStart
Log(MainForm.Height) 'This call works
CallSubDelayed(Me,"ApplyScreenMetrics")
CallSubDelayed(Me,"SetupComplete")
End Sub
Sub ApplyScreenMetrics
' Log(PackageName)
If File.Exists(File.DirData(PackageName),"screen.m") Then
Log(MainForm.Height) 'This one fails
Log(MainForm.WindowLeft)
ScreenMetrics = File.ReadMap(File.DirData(PackageName),"screen.m")
Log(ScreenMetrics)
MainForm.WindowLeft = ScreenMetrics.GetDefault("left",10.0)
MainForm.WindowTop = ScreenMetrics.GetDefault("top",10.0)
MainForm.WindowWidth = ScreenMetrics.GetDefault("width",400.0)
MainForm.WindowHeight = ScreenMetrics.GetDefault("height",300.0)
spMain.DividerPositions = Array As Double(ScreenMetrics.GetDefault("spMainHdiv",0.5))
spRight.DividerPositions = Array As Double(ScreenMetrics.GetDefault("spRightVdiv",0.1))
Else
ScreenMetrics.Initialize
End If
End Sub
Error from the second Log(MainForm.Height)
B4X:
Program started.
600
Error occurred on line: 116 (Main)
java.lang.NullPointerException
at anywheresoftware.b4j.objects.Form.getHeight(Form.java:234)
at com.stevel05.snippetmanager.main._applyscreenmetrics(main.java:114)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:606)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:225)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:93)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:90)
at anywheresoftware.b4a.keywords.Common.CallSub4(Common.java:462)
at anywheresoftware.b4a.keywords.Common.access$0(Common.java:442)
at anywheresoftware.b4a.keywords.Common$CallSubDelayedHelper.run(Common.java:516)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
These errors only occur in Debug mode, I am wondering if it may be a memory issue, but that's not what the logs say. The project is a reasonable size, but I wouldn't say it's huge. It does use a few libraries, but not really any more than my usual projects.
I can't easily try putting it into v4 as it is using a Custom View.
I can't get it to fail in a simple project, but I'm out of ideas where to look.