0

I am trying to run a JavaFX application with OpenJDK/OpenJFX, this is an existing working application based on OracleJDK/JavaFX which we want to migrate to OpenJFX.

I followed the instructions on how to build a fat jar from the OpenJFX documentation and I use these versions:

  • OpenJDK 10
  • OpenJFX 11

I have succesfully built a fat jar that contains all the .class files and libraries.

On Windows 10 I am able to build and run the OpenJFX HelloWorld application. But when running my own application I get errors about various stock shaders that could not be loaded:

java.lang.InternalError: Error loading stock shader Solid_Color

Stacktrace:

java.lang.InternalError: Error loading stock shader Solid_Color
        at com.sun.prism.d3d.D3DResourceFactory.createStockShader(D3DResourceFactory.java:411)
        at com.sun.prism.impl.ps.BaseShaderContext.getPaintShader(BaseShaderContext.java:263)
        at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:484)
        at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:355)
        at com.sun.prism.impl.ps.BaseShaderGraphics.fillQuad(BaseShaderGraphics.java:1613)
        at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:475)
        at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:328)
        at com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:142)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
        at java.base/java.lang.Thread.run(Thread.java:844)
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 com.sun.prism.d3d.D3DResourceFactory.createStockShader(D3DResourceFactory.java:408)
        at com.sun.prism.impl.ps.BaseShaderContext.getPaintShader(BaseShaderContext.java:263)
        at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:484)
        at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:355)
        at com.sun.prism.impl.ps.BaseShaderGraphics.fillQuad(BaseShaderGraphics.java:1613)
        at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:475)
        at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:328)
        at com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:142)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
        at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.RuntimeException: InputStream must be non-null
        at com.sun.prism.d3d.D3DResourceFactory.getBuffer(D3DResourceFactory.java:349)
        at com.sun.prism.d3d.D3DResourceFactory.createShader(D3DResourceFactory.java:390)
        at com.sun.prism.shader.Solid_Color_Loader.loadShader(Solid_Color_Loader.java:47)
        ... 19 more

I followed the suggestion to increase the VRAM from a similar question: JavaFX on Raspberry PI: Error loading stock shader

This did not help.

Also read another similar question: How to recompile JavaFX 11/12

Tried to run the application on various Windows installations, same problem.

They seem to be caused by code such as:

        Pane root = new Pane();
        root.setStyle("-fx-background-color: #676767;-fx-base: #676767; -fx-background: #676767;");

that always worked fine.

What am I missing?

extremecoder85
  • 119
  • 1
  • 12
  • I don't see any -fx-base or -fx-background in the javafx css docs reference. https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/doc-files/cssref.html#pane . You say it always worked fine, in what cases? Did you try only with -fx-background-color? – tec Sep 10 '19 at 10:51
  • Tested it now: I even get the same error without any style code or stylesheets enabled... – extremecoder85 Sep 10 '19 at 11:18
  • Why do you mix JDK version and JavaFX version? Can you try OpenJDK 11? – Puce Sep 10 '19 at 11:45
  • Already tried that, same result. – extremecoder85 Sep 10 '19 at 12:17
  • “I followed the instructions on how to build a fat jar from the OpenJFX documentation” —Could you provide a link to those instructions? – VGR Sep 10 '19 at 13:34
  • Here it is: https://openjfx.io/openjfx-docs/#modular (See the last section titled "Command Line") – extremecoder85 Sep 10 '19 at 14:36
  • 1
    That section has a lot of warnings urging people not to do it that way. I’m guessing something crucial wasn’t included in the right place in your .jar, or wasn’t included at all. Have you considered making your application modular and using `jlink` to make a runnable image? – VGR Sep 10 '19 at 14:43
  • @VGR: I think that will be the way to go. – extremecoder85 Sep 11 '19 at 07:27

0 Answers0