在Windows上运行JavaFX应用程序时出错

在Windows上运行JavaFX应用程序时出错,java,windows,javafx,openjfx,Java,Windows,Javafx,Openjfx,我正在尝试使用OpenJDK/OpenJFX运行JavaFX应用程序, 这是一个基于OracleJDK/JavaFX的现有工作应用程序,我们希望将其迁移到OpenJFX 我按照OpenJFX文档中关于如何构建胖jar的说明进行操作,并使用以下版本: OpenJDK10 OpenJFX11 我成功地构建了一个包含所有.class文件和库的胖jar 在Windows 10上,我能够构建并运行OpenJFX HelloWorld应用程序。但是,当运行我自己的应用程序时,我会收到关于无法加载的各种股

我正在尝试使用OpenJDK/OpenJFX运行JavaFX应用程序, 这是一个基于OracleJDK/JavaFX的现有工作应用程序,我们希望将其迁移到OpenJFX

我按照OpenJFX文档中关于如何构建胖jar的说明进行操作,并使用以下版本:

  • OpenJDK10
  • OpenJFX11
我成功地构建了一个包含所有.class文件和库的胖jar

在Windows 10上,我能够构建并运行OpenJFX HelloWorld应用程序。但是,当运行我自己的应用程序时,我会收到关于无法加载的各种股票着色器的错误:

java.lang.InternalError:加载股票着色器纯色时出错

堆栈跟踪:

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
我从一个类似的问题中采纳了增加VRAM的建议:

这没有帮助

另请阅读另一个类似问题:

尝试在各种Windows安装上运行该应用程序,但出现了相同的问题

它们似乎是由以下代码引起的:

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

那总是很好


我遗漏了什么?

在javafx css文档参考中,我没有看到任何-fx base或-fx背景。你说它总是很好用,在什么情况下?您是否只尝试使用-fx背景色?现在就测试它:在没有启用任何样式代码或样式表的情况下,我甚至会遇到相同的错误…为什么要混合使用JDK版本和JavaFX版本?你能试试OpenJDK 11吗?已经试过了,同样的结果。那个部分有很多警告,敦促人们不要这样做。我猜有些重要的东西没有包含在你的.jar的正确位置,或者根本没有包含在内。您是否考虑过将应用程序模块化,并使用
jlink
创建可运行的映像?