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?