B4J Question I need help to call external jar ๐Ÿ™‹โ€โ™‚๏ธ

jinyistudio

Well-Known Member
Licensed User
Longtime User
Hi
This libray has a .jar file. But I donโ€™t know how to write java. I would like to ask you to help me write a sample program on how to call it. Let me test and modify it myself. Thank you ๐Ÿ™


InitializeNewInstance always give me error => java.lang.ClassNotFoundException: java$blinkstick$class$BlinkStick :eek: Can you tell me where is the error?๐Ÿ™

class manual => http://arvydas.github.io/blinkstick-processing/reference/index.html

B4X:
Sub Class_Globals
    Dim blinkst As JavaObject
    Private ptObject    As Object
    Private ptEvent     As Object   
    Private ptId         As String=""
End Sub

'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize(owner As Object,event As Object,Id As String)
    ptObject= owner
    ptEvent    = event
    ptId    = Id
    blinkst.InitializeNewInstance("java.blinkstick.class.BlinkStick",Null)
End Sub


Noname.jpg
 
Last edited:

jinyistudio

Well-Known Member
Licensed User
Longtime User
It should be:
B4X:
  blinkst.InitializeNewInstance("blinkstick.BlinkStick",Null)
Your code OK. I can try other functions Go Go, thank you ๐Ÿ˜˜
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
It should be:
B4X:
  blinkst.InitializeNewInstance("blinkstick.BlinkStick",Null)
following method in the BlinkStick, How can i dim a BlinkStick variable to receive from findFirst() :eek: ๐Ÿ™
public static BlinkStick findFirst()
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
B4X:
Dim jo As JavaObject
Dim blink As JavaObject = jo.InitializeStatic("blinkstick.BlinkStick").RunMethod("findFirst", Null)
Hi Erel
Function findAll is return array. I try Dim jo() As JavaObject = findAll but I get following exception o_O

(Exception) java.lang.Exception: java.lang.ClassCastException: class [Lblinkstick.BlinkStick; cannot be cast to class [Lanywheresoftware.b4j.object.JavaObject; ([Lblinkstick.BlinkStick; and [Lanywheresoftware.b4j.object.JavaObject; are in unnamed module of loader 'app')

B4X:
Try
Sub findAll As JavaObject()
    Dim jo As JavaObject
    Return jo.InitializeStatic("blinkstick.BlinkStick").RunMethod("findAll", Null)
End Sub
  • findAll
    public static BlinkStick[] findAll()
    Find all BlinkSticks connected to the computer
    Returns:an array of BlinkStick objects​


 
Upvote 0

agraham

Expert
Licensed User
Longtime User
You don't want an array of JavaObjects, you want to return a single JavaObject instance that contains the array.

B4X:
Sub findAll As JavaObject
    Dim jo As JavaObject
    Return jo.InitializeStatic("blinkstick.BlinkStick").RunMethod("findAll", Null)
End Sub
 
Upvote 0

jinyistudio

Well-Known Member
Licensed User
Longtime User
You don't want an array of JavaObjects, you want to return a single JavaObject instance that contains the array.

B4X:
Sub findAll As JavaObject
    Dim jo As JavaObject
    Return jo.InitializeStatic("blinkstick.BlinkStick").RunMethod("findAll", Null)
End Sub
Thank you @agraham your code is ๐Ÿ‘Œ
 
Upvote 0
Solution

jinyistudio

Well-Known Member
Licensed User
Longtime User
following is my main codes
B4X:
'Non-UI application (console / server application)
#Region Project Attributes
    #CommandLineArgs:
    #MergeLibraries: True
    #AdditionalJar: BlinkStick.jar
    #AdditionalJar: hidapi-1.1.jar
#end region

Sub Process_Globals
    Dim bs1 As jyBlinkstick
    Dim timer1 As Timer
    Dim flow As Boolean
End Sub

Sub AppStart (Args() As String)
    bs1.Initialize(Me,"bs1","1")     
    If bs1.findfirst=1 Then
        Log($"serial        : ${bs1.BlinkStick(0).Serial}"$)
        Log($"Version        : ${bs1.BlinkStick(0).version}"$)
        Log($"Product        : ${bs1.BlinkStick(0).Product}"$)
        Log($"Manufacturer    : ${bs1.BlinkStick(0).Manufacturer}"$)
        Log($"info1            : ${bs1.BlinkStick(0).InfoBlock1}"$)
        Log($"info2            : ${bs1.BlinkStick(0).InfoBlock2}"$)
        Log($"Mode2            : ${bs1.BlinkStick(0).Mode}"$)
      
        timer1.Initialize("timer1",1000)
        timer1.Enabled=True
        flow=False
    End If
  
    StartMessageLoop
  
  
End Sub


Sub timer1_tick
    If flow Then
        bs1.BlinkStick(0).setIndexedColor16(0,0,0,0,0)
    Else
        bs1.BlinkStick(0).setIndexedColor16(0,0,Rnd(1,255),Rnd(1,255),Rnd(1,255))
    End If
    flow = Not(flow)
End Sub

I debug with b4j-bridge. I get follow messages when i running jo.InitializeStatic("blinkstick.BlinkStick").RunMethod("findFirst", Null) in the raspberry pi ? o_O

Waiting for debugger to connect...
Program started.
OpenJDK Server VM warning: You have loaded library /tmp/libhidapi-jni-6417314661532003353684.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Error occurred on line: 37 (jyBlinkstick)
java.lang.ClassCastException: class java.lang.UnsatisfiedLinkError cannot be cast to class java.lang.Exception (java.lang.UnsatisfiedLinkError and java.lang.Exception are in module java.base of loader 'bootstrap')
at anywheresoftware.b4a.BA.setLastException(BA.java:377)
at b4j.example.jyblinkstick._findfirst(jyblinkstick.java:111)
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:632)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:234)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessor
Impl.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.BA.raiseEvent2(BA.java:108)
at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:98)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:95)
at b4j.example.main.main(main.java:29)
 
Last edited:
Upvote 0
Top