【问题标题】:Javafx application can not launch when migrating from java 7u21 to higher version从 java 7u21 迁移到更高版本时,Javafx 应用程序无法启动
【发布时间】:2014-07-07 22:19:34
【问题描述】:

我正在接管这个家伙的应用程序,他几乎没有给我留下任何东西,甚至没有评论编码。运气好(还有一点时间),我能够改进应用程序,让它在我的电脑上运行起来就像一个魅力。

但我遇到了一个烦人的问题,让我无法升级应用程序。我的应用程序可以在任何安装了 java 版本 1.7.0_21 的机器上正常运行,但是当我更新到较新的版本(现在是 1.7.0_60)时,应用程序无法运行,它只是一直出现这个愚蠢的错误,我做不到有什么可以解决的。

这是错误日志:

RenderJob.run: internal exception
java.lang.UnsatisfiedLinkError: com.sun.prism.d3d.D3DContext.nSetBlendEnabled(JZ
Z)I
at com.sun.prism.d3d.D3DContext.nSetBlendEnabled(Native Method)
at com.sun.prism.d3d.D3DContext.initState(D3DContext.java:84)
at com.sun.prism.d3d.D3DResourceFactory.<init>(D3DResourceFactory.java:5
7)
at com.sun.prism.d3d.D3DPipeline.createResourceFactory(D3DPipeline.java:
150)
at com.sun.prism.d3d.D3DPipeline.getD3DResourceFactory(D3DPipeline.java:
156)
at com.sun.prism.d3d.D3DPipeline.findDefaultResourceFactory(D3DPipeline.
java:182)
at com.sun.prism.d3d.D3DPipeline.getDefaultResourceFactory(D3DPipeline.j
ava:204)
at com.sun.prism.GraphicsPipeline.getDefaultResourceFactory(GraphicsPipe
line.java:97)
at com.sun.javafx.tk.quantum.QuantumRenderer$3.run(QuantumRenderer.java:
143)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at com.sun.prism.render.RenderJob.run(RenderJob.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Quantu
mRenderer.java:98)
at java.lang.Thread.run(Unknown Source)

我发现了另一个类似的问题 Unable to deploy JavaFX applicaiton with external libraries in a JAR 但我不能在我的情况下应用它,因为这个程序/框架需要从 .bat 文件(实际上是命令行)运行来创建一堆报告文件和文件夹。

【问题讨论】:

  • 您是否将 javafx jar 添加到系统路径或类路径中?如果是这样,请删除相同的内容。
  • 是的,我确实有一个外部 lib 文件夹,但如果我删除任何一个,应用程序将无法运行,因为我已经告诉我的应用程序在运行命令中查找类路径的位置

标签: java javafx version


【解决方案1】:

您的应用附加了哪个 JavaFX 版本? 我怀疑附加的 JavaFX 版本与 1.7.0_60 不兼容。我对此也有同样的问题。 但这个例外对我来说是新的(它是一些内部棱镜的东西)

【讨论】:

  • 我不敢相信我错过了这个东西,我的意思是我正在浏览我所有的外部 lib 文件并将它们更新到最新版本以获得与 1.7.0_60 的最佳兼容性,但我显然错过了这个一个非常糟糕。因此,简单的解决方案是转到那台有问题的机器上的安装文件夹,然后将 jfxrt.jar 文件复制/替换到我的外部 lib 文件夹中。非常感谢!
【解决方案2】:

根据我的经验,JFXRT jar 与它捆绑的 JRE/JDK version.update 紧密耦合(在 oracles jvm 的情况下)。这意味着应用程序需要在 jvm version.update 上运行,因为它是从中提取的。您应该能够使用此处http://docs.oracle.com/javafx/2/deployment/packaging.htm 中规定的构建方法来解决此问题。

【讨论】:

  • 我发现最成功的方法是将所需的 jre 与应用程序捆绑在一起。它不是最干净的,甚至不是最好的,但它肯定是最简单的。
  • 谢谢你们,我通过将我的 jfxrt.jar 文件更新到我正在运行的机器的本地版本解决了这个问题。有时问题来自我们错过的一些小步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2013-02-04
  • 2019-02-01
  • 1970-01-01
相关资源
最近更新 更多