B4J Question B4jPackager11 + Jasper = Error

DarkoT

Active Member
Licensed User
Hi guys...

Need Help... I'm finish with my first more complex project which using B4J desktop app with integrated Jasper report. When I want do distribute my application and using integrated packager for build Win exe, i receive a error:



B4JPackager11 Version 1.21
Exe name: OptDnCheck.exe
InputJar: C:\Work\Vtisk\B4JProjects\OptDnCheck\B4J\Objects\OptDnCheck.jar
Running: C:\Work\Vtisk\B4JPRO~1\OPTDNC~1\B4J\Objects\temp\FindDosPath.exe
Running: C:\Work\Install\Java\jdk-11.0.1\bin\jar
Package name: OptimusCheck.App
Running: C:\Work\Install\Java\jdk-11.0.1\bin\jdeps
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Explicitly excluded modules: [javafx.web]
Included modules: [java.base, java.datatransfer, java.desktop, java.logging, java.management, java.management.rmi, java.naming, java.prefs, java.rmi, java.scripting, java.security.jgss, java.sql, java.sql.rowset, java.transaction.xa, java.xml, java.xml.crypto, javafx.base, javafx.controls, javafx.fxml, javafx.graphics, javafx.media, javafx.swing, jdk.security.auth, jdk.unsupported, jdk.unsupported.desktop, jdk.jsobject, jdk.xml.dom]
Running: C:\Work\Install\Java\jdk-11.0.1\bin\javac
.
.
module-info.java:32: error: package org.codehaus.groovy.plugins does not exist
uses org.codehaus.groovy.plugins.Runners;
^
module-info.java:33: error: cannot find symbol
uses org.codehaus.groovy.runtime.ExtensionModule;
^
symbol: class ExtensionModule
location: package org.codehaus.groovy.runtime
module-info.java:34: error: package org.codehaus.groovy.source does not exist
uses org.codehaus.groovy.source.Extensions;
^
3 errors
how can I add package for groovy.plugins into project? I found similar problem solved by @Erel - here: https://www.b4x.com/android/forum/threads/solved-b4jpackager11-jasperreports-error.115168/page-3

But there is no solution, which will help me... Basicaly - how it's posible to add groovy to project? I try with both possibilities:
#PackagerProperty: IncludedModules = org.codehaus.groovy:groovy-all:2.4.3
#PackagerProperty: AdditionalModuleInfoString = use org.codehaus.groovy:groovy-all:2.4.3;

and received a error...
(sorry, this is my first b4j "not simple" project and need help)...

Thank's DaT
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
This one is simple.
B4X:
#PackagerProperty: VMArgs = --add-opens b4j/net.sf.jasperreports.engine.fill=ALL-UNNAMED --add-opens b4j/net.sf.jasperreports.compilers=ALL-UNNAMED
Note that in the next version of B4J it will be possible to set the same property multiple times. For now you need to do it in a single line.
 
Upvote 0

DarkoT

Active Member
Licensed User
This one is simple.
B4X:
#PackagerProperty: VMArgs = --add-opens b4j/net.sf.jasperreports.engine.fill=ALL-UNNAMED --add-opens b4j/net.sf.jasperreports.compilers=ALL-UNNAMED
Note that in the next version of B4J it will be possible to set the same property multiple times. For now you need to do it in a single line.
I try to add all missed rutines into #PackagerProperty and still not working... I get the next error:

java.io.IOException: Stream closed
at java.base/java.io.BufferedInputStream.getInIfOpen(Unknown Source)
at java.base/java.io.BufferedInputStream.fill(Unknown Source)
at java.base/java.io.BufferedInputStream.read(Unknown Source)
at java.base/java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.base/java.io.DataInputStream.readUTF(Unknown Source)
at java.base/java.io.DataInputStream.readUTF(Unknown Source)
at b4j/org.codehaus.groovy.reflection.GeneratedMetaMethod$DgmMethodRecord.loadDgmInfo(Unknown Source)
at b4j/org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(Unknown Source)
at b4j/org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(Unknown Source)
at b4j/org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(Unknown Source)
at b4j/groovy.lang.GroovySystem.<clinit>(Unknown Source)
at b4j/org.codehaus.groovy.reflection.ClassInfo.isValidWeakMetaClass(Unknown Source)
at b4j/org.codehaus.groovy.reflection.ClassInfo.getMetaClassForClass(Unknown Source)
at b4j/org.codehaus.groovy.reflection.ClassInfo.getMetaClass(Unknown Source)
at Dobavnica_SI_1621535481678_820686.$getStaticMetaClass(calculator_Dobavnica_SI_1621535481678_820686)
at Dobavnica_SI_1621535481678_820686.<init>(calculator_Dobavnica_SI_1621535481678_820686)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at b4j/net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(Unknown Source)
at b4j/net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperCompileManager.getEvaluator(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.BaseReportFiller.<init>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fillReport(Unknown Source)
at b4j/com.prusb.jasperrep.JasperReports.Print(Unknown Source)
at b4j/b4j.example.main._btnmysql_action(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$1.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)
May 20, 2021 8:31:23 PM net.sf.jasperreports.engine.fonts.FontExtensionsRegistry ensureFontExtensions
SEVERE: Error loading font extensions from net/sf/jasperreports/fonts/jasperreports-fonts.xml
net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Input stream not found at: net/sf/jasperreports/fonts/jasperreports-fonts.xml.
at b4j/net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontExtensions(Unknown Source)
at b4j/net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.ensureFontExtensions(Unknown Source)
at b4j/net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(Unknown Source)
at b4j/net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(Unknown Source)
at b4j/net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fillReport(Unknown Source)
at b4j/com.prusb.jasperrep.JasperReports.Print(Unknown Source)
at b4j/b4j.example.main._btnmysql_action(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$1.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)
Caused by: net.sf.jasperreports.engine.JRException: Input stream not found at: net/sf/jasperreports/fonts/jasperreports-fonts.xml.
at b4j/net.sf.jasperreports.repo.RepositoryUtil.getInputStreamFromLocation(Unknown Source)
... 28 more

main._btnmysql_action (java line: -1)
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $F{co_name}
at b4j/net.sf.jasperreports.engine.fill.JREvaluator.handleEvaluationException(Unknown Source)
at b4j/net.sf.jasperreports.compilers.GroovyEvaluator.handleEvaluationException(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JREvaluator.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRCalculator.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRCalculator.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFillBand.evaluate(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBandNoOverflow(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.fillPageHeader(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRBaseFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.BaseReportFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.fill.JRFiller.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fill(Unknown Source)
at b4j/net.sf.jasperreports.engine.JasperFillManager.fillReport(Unknown Source)
at b4j/com.prusb.jasperrep.JasperReports.Print(Unknown Source)
at b4j/b4j.example.main._btnmysql_action(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$1.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)
Caused by: java.lang.IllegalAccessError: class Dobavnica_SI_1621535481678_820686 (in unnamed module @0x547c0ade) cannot access class org.codehaus.groovy.runtime.typehandling.ShortTypeHandling (in module b4j) because module b4j does not export org.codehaus.groovy.runtime.typehandling to unnamed module @0x547c0ade
at Dobavnica_SI_1621535481678_820686.evaluate(calculator_Dobavnica_SI_1621535481678_820686:392)

My run_debug.bat since to be to long?:

java.exe @release_java_modules.txt --add-opens b4j/net.sf.jasperreports.engine.fill=ALL-UNNAMED --add-opens b4j/net.sf.jasperreports.compilers=ALL-UNNAMED --add-opens b4j/groovy.lang=ALL-UNNAMED --add-opens b4j/org.codehaus.groovy.runtime.callsite=ALL-UNNAMED --add-opens b4j/org.codehaus.groovy.runtime=ALL-UNNAMED --add-opens b4j/org.codehaus.groovy.reflection=ALL-UNNAMED -m b4j/b4j.example.main
 
Upvote 0

DarkoT

Active Member
Licensed User
I'm still confused and can not understand - why the system works perfect when I start the application from B4J development tool (in release/debug mode) and can not distribute this application to another machine... Or other applications which I created working perfect - on every linux and win machine... Only this case which should PRINT Delivery Note (created in Jasper Studio) will not work... Maybe I need to switch to another report designer.... Any suggestion what should I use? What will be best to create Delivery Note and other operative print-outs and will be "compatible" with B4J?
Suggest me..

Thx, DaT
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
why the system works perfect when I start the application from B4J development tool (in release/debug mode) and can not distribute this application to another machine.
As I wrote before, the Jasper library is an old and complex library which isn't compatible with Java 9+ modules system.

I recommend you to use Java 8 and either distribute the jar itself and rely on Java being installed on the user computer or pack it with the old Packager tool (not B4JPackager11).
 
Upvote 0

DarkoT

Active Member
Licensed User
As I wrote before, the Jasper library is an old and complex library which isn't compatible with Java 9+ modules system.

I recommend you to use Java 8 and either distribute the jar itself and rely on Java being installed on the user computer or pack it with the old Packager tool (not B4JPackager11).
Okay, understand... But - in any case - I will switch to another reporting tool; because - I want to stay on B4J!!! It's really nice programmers tool with great community (people making real world!)... And want to be part of this world... So, please, suggest me which reporting tool should I use for creating a operative reporting (Invoices, Delivery notes, ...)

Best regards and thanks for help...

DaT
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Okay, understand... But - in any case - I will switch to another reporting tool; because - I want to stay on B4J!!!
You misunderstood me. Stay on B4J. Use Java 8 instead of Java 11 (Tools - Configure Paths) and use this tool to create a standalone package: https://www.b4x.com/android/forum/threads/ui-apps-packaging-self-contained-installers.56854/#content

You can also skip the package at all and distribute the compiled jar. Users will be able to double click to run it, if Java 8 is installed on their computers.
 
Upvote 0

DarkoT

Active Member
Licensed User
You misunderstood me. Stay on B4J. Use Java 8 instead of Java 11 (Tools - Configure Paths) and use this tool to create a standalone package: https://www.b4x.com/android/forum/threads/ui-apps-packaging-self-contained-installers.56854/#content

You can also skip the package at all and distribute the compiled jar. Users will be able to double click to run it, if Java 8 is installed on their computers.
Okay, I will try also this option... In any case - I will switch to another reporting tool.... Can you make some suggestion which will be best for using "standard" B4J environment?
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Upvote 0
Top