B4J Question [SORTED] Errors only on Standalone version

IndieDev

Active Member
Licensed User
Longtime User
Hi,

I am compiling a B4J program using MS Access.
Using similar code as in Opening MS Access databases (mdb)

When executing in Release mode, it runs fine.
Only the Standalone version exits with errors.

These errors display on executing run_debug.bat

B4X:
 Init sql connection...
main$MyOpener.open (java line: -1)
java.lang.ExceptionInInitializerError
        at b4j/com.healthmarketscience.jackcess.impl.GeneralLegacyIndexCodes.getCharHandler(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.GeneralLegacyIndexCodes.writeNonNullIndexTextValue(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexData$GenLegTextColumnDescriptor.writeNonNullValue(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexData$ColumnDescriptor.writeValue(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexData.createEntryBytes(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexData.access$4000(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.beforeEntry(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexCursorImpl.findPotentialRow(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntryImpl(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntry(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl$DefaultTableFinder.findRow(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl$TableFinder.findObjectId(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.open(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.DatabaseBuilder.open(Unknown Source)
        at b4j/b4j.pk.syslog.main$MyOpener.open(Unknown Source)
        at b4j/net.ucanaccess.jdbc.DBReference.<init>(Unknown Source)
        at b4j/net.ucanaccess.jdbc.DBReferenceSingleton.loadReference(Unknown Source)
        at b4j/net.ucanaccess.jdbc.UcanaccessDriver.connect(Unknown Source)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at b4j/anywheresoftware.b4j.objects.SQL.Initialize2(Unknown Source)
        at b4j/b4j.pk.syslog.main._database_init(Unknown Source)
        at b4j/b4j.pk.syslog.main$ResumableSub_AppStart.resume(Unknown Source)
        at b4j/anywheresoftware.b4a.keywords.Common$2$1.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        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)
Caused by: java.lang.RuntimeException: failed loading index codes file com/healthmarketscience/jackcess/index_codes_genleg.txt
        at b4j/com.healthmarketscience.jackcess.impl.GeneralLegacyIndexCodes.loadCodes(Unknown Source)
        at b4j/com.healthmarketscience.jackcess.impl.GeneralLegacyIndexCodes$Codes.<clinit>(Unknown Source)
        ... 33 more
Caused by: java.io.IOException: Could not load jackcess resource com/healthmarketscience/jackcess/index_codes_genleg.txt        at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.getResourceAsStream(Unknown Source)
        ... 35 more

The JAR file executes fine using:
[CODE lang="b4x" title="jar command line"]D:\_DEV\jdk-14.0.1\bin\javaw --module-path "D:\_DEV\jdk-14.0.1\javafx\lib" --add-modules ALL-MODULE-PATH -jar pkSysLog.jar[/CODE]

Could anyone kindly help out here please?

B4J version: 9.80
JDK version: 14.0.1


Additional jars used:
B4X:
      #AdditionalJar: ucanaccess-5.0.1
    #AdditionalJar: commons-lang3-3.12.0
    #AdditionalJar: commons-logging-1.2
    #AdditionalJar: hsqldb-2.5.0
    #AdditionalJar: jackcess-4.0.5
    #AdditionalJar: jackcess-encrypt-4.0.2
    #AdditionalJar: bcprov-jdk15on-166
Regards.
 
Hi,

Am attaching a sample project and a copy of the Database for testing.
Password for DB: passpass

When compiling in Debug mode, it throws errors:
[CODE lang="b4x" title="Errors in Debug mode"]WARNING: package com.sun.javafx.embed.swing.oldimpl not in javafx.swing
Waiting for debugger to connect...
java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:427)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.loadClass(LauncherImpl.java:382)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplicationWithArgs$3(LauncherImpl.java:421)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
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:832)
Caused by: java.lang.RuntimeException: java.net.SocketException: Connection reset
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:140)
at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:98)
at b4j.pk.syslog.main.<clinit>(main.java:24)
... 12 more
Caused by: java.net.SocketException: Connection reset
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:263)
at java.base/java.io.DataInputStream.readByte(DataInputStream.java:269)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:229)
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.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:564)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:111)
... 14 more
java.lang.reflect.InvocationTargetException
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:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.NullPointerException
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:458)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
... 5 more
[/CODE]

It runs fine in "Release" and "Release (obfuscated)" modes.

Standalone package throws errors.

Regards.

PS: The libraries are too large to upload here. so here's a link to download
 

Attachments

Last edited:
Upvote 0
Just a small update.
After cleaning the project (Ctrl+P), Debug mode seems to be working.

Regards.
 
Upvote 0
I didn't remember it but when I see this line:
Code:
#AdditionalJar: jackcess-3.0.1-B4J
I know that it is a modified version.
Okay.

Just tried with the old files.
Compiles fine but with some warnings as below.
[CODE lang="b4x" title="compile warning"]Global.DBFile3=\\192.168.1.6\SharedFolder\users.accdb
Init sql connection...
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector$1 (file:/Y:/_Projects/B4J/Temp/pkSysLognew/Objects/pkSysLog.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Loading: com/healthmarketscience/jackcess/index_codes_genleg.txt
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: Checkpoint start
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose synched
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose script done
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose end
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: Checkpoint end - txts: 1
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: dataFileCache open start
Feb 05, 2023 1:01:51 PM org.hsqldb.persist.Logger logInfoEvent
INFO: dataFileCache open end
Init sql connection... DONE
[/CODE]

But now it does not finish the Standalone package process and displays errors.
[CODE lang="b4x" title="Standalone package errors"]
B4JPackager11 Version 1.40
Exe name: pkSysLog.exe
build folder: Y:\_Projects\B4J\Temp\pkSysLognew\Objects\temp\build
InputJar: Y:\_Projects\B4J\Temp\pkSysLognew\Objects\pkSysLog.jar
Running: Y:\_Projects\B4J\Temp\pkSysLognew\Objects\temp\FindDosPath.exe
Running: D:\_DEV\jdk-14.0.1\bin\jar
Package name: b4j.pk.syslog
Running: D:\_DEV\jdk-14.0.1\bin\jdeps
.
Exception in thread "main" java.lang.module.FindException: Module java.activation not found, required by java.xml.bind
at java.base/java.lang.module.Resolver.findFail(Resolver.java:894)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:191)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:140)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:422)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:256)
at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:603)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:557)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)

[/CODE]

Attaching the project here again.

Please see if you can have a go at it.

Regards.

NOTE: Updated the Build Standalone Package errors.
 

Attachments

Last edited:
Upvote 0
In AppStart, please modify this line to point to the DB file.

[CODE lang="b4x" title="In line 58"]Global.DBFile = "\\192.168.1.6\SharedFolder\users.accdb"[/CODE]
 
Upvote 0
One more update.

[CODE lang="b4x" title="commented the last 3 lines"] ' SQLite driver
#AdditionalJar: ucanaccess-5.0.0
#AdditionalJar: hsqldb-2.5.0
#AdditionalJar: jackcess-3.0.1-B4J
#AdditionalJar: jackcess-encrypt-3.0.0
#AdditionalJar: commons-logging-1.2
#AdditionalJar: commons-lang3-3.8.1
#AdditionalJar: bcprov-jdk15on-166
' #AdditionalJar: jaxb-api-2.3.0
' #AdditionalJar: jaxb-impl-2.1
' #AdditionalJar: activation-2.2.1[/CODE]

Now, it creates the package, but crashes at start.
Using run_debug.bat, it displays the following errors:
[CODE lang="b4x" title="runtime errors"]Y:\_Projects\B4J\Temp\pkSysLognew\Objects\temp\build\bin>java.exe @release_java_modules.txt -m b4j/b4j.pk.syslog.main
Global.DBFile3=\\192.168.1.6\SharedFolder\users.accdb
Init sql connection...
main$MyOpener.open (java line: -1)
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at b4j/com.healthmarketscience.jackcess.impl.office.AgileEncryptionProvider.<init>(Unknown Source)
at b4j/com.healthmarketscience.jackcess.impl.OfficeCryptCodecHandler.create(Unknown Source)
at b4j/com.healthmarketscience.jackcess.CryptCodecProvider.createHandler(Unknown Source)
at b4j/com.healthmarketscience.jackcess.impl.PageChannel.initialize(Unknown Source)
at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(Unknown Source)
at b4j/com.healthmarketscience.jackcess.impl.DatabaseImpl.open(Unknown Source)
at b4j/com.healthmarketscience.jackcess.DatabaseBuilder.open(Unknown Source)
at b4j/b4j.pk.syslog.main$MyOpener.open(Unknown Source)
at b4j/net.ucanaccess.jdbc.DBReference.<init>(Unknown Source)
at b4j/net.ucanaccess.jdbc.DBReferenceSingleton.loadReference(Unknown Source)
at b4j/net.ucanaccess.jdbc.UcanaccessDriver.connect(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
at b4j/anywheresoftware.b4j.objects.SQL.Initialize2(Unknown Source)
at b4j/b4j.pk.syslog.main._database_init(Unknown Source)
at b4j/b4j.pk.syslog.main._appstart(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at b4j/anywheresoftware.b4a.BA.raiseEvent2(Unknown Source)
at b4j/anywheresoftware.b4a.BA.raiseEvent(Unknown Source)
at b4j/b4j.pk.syslog.main.start(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
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)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 32 more[/CODE]

Regards.
 
Upvote 0
I've tried it and it will not work. The jaxb libraries aren't compatible with Java modules system. You will need to distribute it as a jar. You can distribute it together with OpenJDK 11 + JavaFX 11 and start it with a batch file.
Understood.

Thanks a lot for your help. ?

Regards.
 
Upvote 0
I've tried it and it will not work
HI! both!
After several weeks i managed to compile the standalone package that works with JaXB, i had to use the Jakarta version of the library and used these lines on the IDE:

B4X:
    #PackagerProperty: IncludedModules = jdk.charsets,java.base,java.desktop,java.logging,java.management,java.naming,java.scripting,java.security.jgss,java.sql,java.transaction.xa,java.xml,java.xml.crypto,javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,jdk.unsupported,java.datatransfer,jdk.unsupported.desktop,jdk.jsobject,jdk.xml.dom
    #PackagerProperty: VMArgs = --add-exports java.base/sun.security.x509=b4j --add-opens java.base/sun.security.x509=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=b4j --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xerces.internal.jaxp=b4j --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xpath.internal.jaxp=b4j --add-opens java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED
    #PackagerProperty: AdditionalModuleInfoString = uses jakarta.xml.bind.JAXBContextFactory;

And these were the jars that i used:
1675701557878.png


I used them to create a library with the SLC and wrapped the libraries in its own jar and added that jar as an #additional jar.

With all these i could use Jaxb.

I know its a different context, but it may help you achieve you what you are trying.
 
Upvote 0
HI! both!
After several weeks i managed to compile the standalone package that works with JaXB, i had to use the Jakarta version of the library and used these lines on the IDE:

B4X:
    #PackagerProperty: IncludedModules = jdk.charsets,java.base,java.desktop,java.logging,java.management,java.naming,java.scripting,java.security.jgss,java.sql,java.transaction.xa,java.xml,java.xml.crypto,javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,jdk.unsupported,java.datatransfer,jdk.unsupported.desktop,jdk.jsobject,jdk.xml.dom
    #PackagerProperty: VMArgs = --add-exports java.base/sun.security.x509=b4j --add-opens java.base/sun.security.x509=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=b4j --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xerces.internal.jaxp=b4j --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED --add-exports java.xml/com.sun.org.apache.xpath.internal.jaxp=b4j --add-opens java.xml/com.sun.org.apache.xpath.internal.jaxp=ALL-UNNAMED
    #PackagerProperty: AdditionalModuleInfoString = uses jakarta.xml.bind.JAXBContextFactory;

And these were the jars that i used:
View attachment 138986

I used them to create a library with the SLC and wrapped the libraries in its own jar and added that jar as an #additional jar.

With all these i could use Jaxb.

I know its a different context, but it may help you achieve you what you are trying.
Hi Enrique,

Thank you for this information.

Will try this method.
And will revert back here.

Regards.
 
Upvote 0
Back
Top