B4J Question Error: Only occurs when in debug and no breakpoints and in release version

rgarnett1955

Active Member
Licensed User
Longtime User
Hi,

Using B4J 9.5 (64 Bit)

I am getting an error:

Peek (ClassCastException) java.lang.ClassCastException: class [F cannot be cast to class [I ([F and [I are in module java.base of loader 'bootstrap')

I am getting this error when I compile for release or I am in debug with NO break points.

As soon as I add one break point even though it is not being hit the error does not occur:

No Break Point or release mode

Snag_fb43372.png



With Break Point:

Snag_fb5333f.png


The function is contained within a standard class and is being called from a timer.

I have seen this error in other situations.

The function where the error is occurring is:

Circular Buffer Peek Function:
'============================================================================================
' Examine the data at a place relative to the tail and return the value in data
' Data is not removed from buffer. If look ahead counter <= 0 or > current size
' then all entries are returned
public Sub cbuf_peek(look_ahead_counter As Int) As List
    Dim pos As Int
    Dim outList As List
    outList.Initialize
  
    Dim data(noFields) As Int
      
    'We can't look beyond the current buffer size
    If  cbuf_empty Then
        Return outList
    End If

    If look_ahead_counter > cbuf_size Or look_ahead_counter < 0 Then
        look_ahead_counter = cbuf_size
    End If

    pos = tail
    For k = 0 To look_ahead_counter
        pos = advance_headtail_value(pos)
    Next
  
    #IF MIN_LOGGING_ON Or LOGGING_ON
    Log(" Peek: Pos - 1  = " & (pos - 1) & " Cbuf Size = " &  cbuf_size & "  List Size = " & buffer.Size)
    #End If
  
    Try 
        data =     buffer.Get(pos - 1)
        outList.Add(data)
    Catch
        Log("Peek " & LastException)
    End Try 
    Return outList
End Sub

The full error stack without the try statement is:

Error:
Waiting for debugger to connect...
Program started.
IPC: My ip is: 192.168.1.114
mcuClient Line 693(SQLiteException) org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (table cmdList already exists)
Cmd Timer - Tick .......
CMD_NULL Processed OK Nt =   Time 14-44-32
Cmd Timer - Tick .......
CMD_NULL Processed OK Nt =   Time 14-44-37
Cmd Timer - Tick .......
CMD_NULL Processed OK Nt =   Time 14-44-43
processPersistantCommands = True
Get temp control Vars
Packet Header No Recs = 20  No Recs Max Per Packet = 71
 Peek: Pos - 1  = 19 Cbuf Size = 20  List Size = 20
Error occurred on line: 399 (circBuffVars)
java.lang.ClassCastException: class [F cannot be cast to class [I ([F and [I are in module java.base of loader 'bootstrap')
    at b4j.shortBridgeMinLogging.circbuffvars._cbuf_peek(circbuffvars.java:218)
    at b4j.shortBridgeMinLogging.mcuproccmd._logtuningvarsfromcircbuffer(mcuproccmd.java:724)
    at b4j.shortBridgeMinLogging.mcuproccmd$ResumableSub_processTempTuningVars.resume(mcuproccmd.java:2022)
    at b4j.shortBridgeMinLogging.mcuproccmd._processtemptuningvars(mcuproccmd.java:1880)
    at b4j.shortBridgeMinLogging.mcuproccmd$ResumableSub_mcu_retData.resume(mcuproccmd.java:475)
    at b4j.shortBridgeMinLogging.mcuproccmd._mcu_retdata(mcuproccmd.java:202)
    at b4j.shortBridgeMinLogging.mcuclient._tcpstream_newdata(mcuclient.java:3312)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:629)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:234)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:111)
    at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:98)
    at anywheresoftware.b4a.BA$2.run(BA.java:250)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:834)

I tried putting a sleep() in the code irrationally thinking that might help, bit it didn't.

I don't remember seeing this happen in older versions of B4j, but I can't be sure about this.

The problem is that as soon as I try to debug it with a break-point the error does not occur.

Does anyone know what is happening?


Regards
Rob

PS Additional:

If I make the code more efficient:

Peek:
    Try   
        outList.Add(buffer.Get(pos - 1))
    Catch
        Log("Peek " & LastException)
    End Try

The problem goes away.

Strange
 
Last edited:
Top