B4J Question [ABMaterial] GridBuilder and Java11

janderkan

Well-Known Member
Licensed User
Longtime User
On Java 11 it is not possible to run a .jar file .
I tried pack it with B4JPackager11 but I only get a blank window.
This is the output from run_debug.bat
B4X:
C:\2Work\1C\B4J\B4JPackager11\Objects\temp\build\bin>java.exe @release_java_modules.txt -m b4j/com.ab.main
java.lang.NullPointerException
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas$RenderBuf.validate(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.initCanvas(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderForClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderRectClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.CacheFilter.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderCached(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.doPaint(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.PresentingPainter.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas$RenderBuf.validate(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.initCanvas(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderForClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderRectClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderClip(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.CacheFilter.renderNodeToCache(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.CacheFilter.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.renderCached(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGNode.render(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.doPaint(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.PresentingPainter.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas$RenderBuf.validate(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.initCanvas(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGCanvas.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.sg.prism.NGGroup.renderForcedContent(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.ViewPainter.paintImpl(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.PresentingPainter.run(Unknown Source)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
 

OliverA

Expert
Licensed User
Longtime User
This is the problem. You need to modify B4JPackager 11 and add it here:
In my case, in order for run_debug to work I also change line 297 to
B4X:
java.exe @release_java_modules.txt -Dprism.order=sw -m ${TargetModule}/${PackageName}.main
Does this need to a future option for B4JPackager where you can select if JavaFX should use the graphics card or not? Or enable additional command line arguments?
 
Upvote 0

janderkan

Well-Known Member
Licensed User
Longtime User
The relevant line is 283 and it was changed:


Please look at post #9
B4X:
p.StartInfo.Arguments = "@release_java_modules.txt -Dprism.order=sw -m ${TargetModule}/${PackageName}.main";

In release 1.13 Run does not work, Run_debug works.
Adding both line 281 and 297 , Run and Run_debug works.
 
Last edited:
Upvote 0

OliverA

Expert
Licensed User
Longtime User
Please look at post #9
I've tested the new version of B4JPackager (v 1.13) and it works correctly for this case. The only thing you have to add manually to run_debug.bat is the -dark command line parameter (if you want dark mode - which seems to be the preferred mode for ABMGruidBuilder). For run.exe, use it with the -dark command line argument. Alternative would be again to change B4JPackager's code to include -dark command line option (in the same places (with new line numbers) as this fix). Either that, or @Erel produces another B4JPackager11 that allows for command line arguments.
 
Upvote 0

janderkan

Well-Known Member
Licensed User
Longtime User

I used v 1.12 and I got the error i post #1
I changed line 281 and 297 and it worked great.
With v1.13 I am back to the same error.
 
Upvote 0

OliverA

Expert
Licensed User
Longtime User
Did you change the VMArgs global variable (in B4JPackager11) to:
B4X:
Private VMArgs As String = "-Dprism.order=sw"
 
Upvote 0

janderkan

Well-Known Member
Licensed User
Longtime User
Did you change the VMArgs global variable (in B4JPackager11) to:
B4X:
Private VMArgs As String = "-Dprism.order=sw"

This is new info, you cannot find it in this thread.
This is the code from v1.13
B4X:
   Private VMArgs As String

So if you run from IDE it does not work, no command line arguments.

Adding your change it works fine.
 
Upvote 0
Cookies are required to use this site. You must accept them to continue using the site. Learn more…