我正在 Eclipse 中开发 JavaFX 应用程序。该应用程序具有外部库,例如 log4j 等,并且可以从 Eclipse 完美运行。我尝试过通过 Eclipse 内置功能将它作为可运行 jar 从 Eclipse 部署,它在某些计算机上运行良好,而在其他计算机上则会出现模糊的未定义链接错误。经过深入研究后,似乎 JavaFX 需要通过 ANT 脚本或通过javafxpackager
应用。
在我的一生中,我似乎无法通过这些方法中的任何一种来部署可运行的 jar。尝试这两种方法中的任何一种,都会出现异常。我尝试过的事情:
-
通过 ANT 脚本构建 JavaFX 应用程序,下面是构建脚本相关部分的片段
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<fileset dir="${javafx.sdk.path}/jre/lib" includes="jfxrt.jar"/>
</path>
<target name="compile" depends="clean">
<echo>Compiling the source</echo>
<mkdir dir="${classes.dir}"/>
<!-- Copy over the misc files into the classes dir -->
<copy todir="${classes.dir}/bundles">
<fileset dir="${src.dir}/bundles"/>
</copy>
<copy todir="${classes.dir}/css">
<fileset dir="${src.dir}/css"/>
</copy>
<copy todir="${classes.dir}/img">
<fileset dir="${src.dir}/img"/>
</copy>
<copy todir="${classes.dir}/views">
<fileset dir="${src.dir}/views"/>
</copy>
<copy todir="${classes.dir}/bundles">
<fileset dir="${src.dir}/bundles"/>
</copy>
<copy file="${src.dir}/log4j2.xml" todir="${classes.dir}"/>
<javac target="1.7" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" debug="on">
</javac>
</target>
<target name="jar" depends="compile">
<echo>Creating the main jar file</echo>
<mkdir dir="${distro.dir}" />
<fx:jar destfile="${distro.dir}/main.jar" verbose="true">
<fx:platform javafx="2.1+" j2se="7.0"/>
<fx:application mainClass="${main.class}"/>
<!-- What to include into result jar file?
Everything in the build tree-->
<fileset dir="${classes.dir}"/>
<!-- Define what auxilary resources are needed
These files will go into the manifest file,
where the classpath is defined -->
<fx:resources>
<fx:fileset dir="${distro.dir}" includes="main.jar"/>
<fx:fileset dir="." includes="${lib.dir}/**" type="jar"/>
<fx:fileset dir="." includes="."/>
</fx:resources>
<!-- Make some updates to the Manifest file -->
<manifest>
<attribute name="Implementation-Vendor" value="${app.vendor}"/>
<attribute name="Implementation-Title" value="${app.name}"/>
<attribute name="Class-Path" value="${lib.dir}"/>
<attribute name="Implementation-Version" value="1.0"/>
</manifest>
</fx:jar>
</target>
通过 ant 脚本编译/生成 jar,我会弹出一个窗口半秒钟,并在控制台中出现“应用程序启动方法中的异常”,没有堆栈跟踪。我试过用运行java-XX:-OmitStackTraceInFastThrow
标志,但它仍然不会给我堆栈跟踪。
-
通过运行javafxpackager
给出以下错误:
RenderJob.run:内部异常
java.lang.UnsatisfiedLinkError: com.sun.prism.d3d.D3DContext.nSetBlendEnabled(JZ
Z)I
在 com.sun.prism.d3d.D3DContext.nSetBlendEnabled(本机方法)
在 com.sun.prism.d3d.D3DContext.initState(D3DContext.java:84)
在 com.sun.prism.d3d.D3DResourceFactory。(D3DResourceFactory.java:5
7)
在com.sun.prism.d3d.D3DPipeline.createResourceFactory(D3DPipeline.java:
147)
在com.sun.prism.d3d.D3DPipeline.getD3DResourceFactory(D3DPipeline.java:
153)
在 com.sun.prism.d3d.D3DPipeline.findDefaultResourceFactory(D3DPipeline.
爪哇:179)
在 com.sun.prism.d3d.D3DPipeline.getDefaultResourceFactory(D3DPipeline.j
艾娃:201)
在 com.sun.prism.GraphicsPipeline.getDefaultResourceFactory(GraphicsPipe
行.java:97)
在 com.sun.javafx.tk.quantum.QuantumRenderer$3.run(QuantumRenderer.java:
143)
在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:47
1)
在java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
在 com.sun.prism.render.RenderJob.run(RenderJob.java:37)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
爪哇:1145)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:615)
在 com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Quantu
mRenderer.java:98)
在 java.lang.Thread.run(Thread.java:724)
您可以使用以下方式部署您的应用程序javafxpackager
。如果您部署一个自给自足应用程序中,Java 运行时环境将与您的应用程序捆绑在一起,并且无论是否安装了正确版本的 Java,它都可以在任何计算机上运行。
(你应该有javafxpackager
在你的jdk目录下的bin文件夹下。)
查找您编译的文件(.class
)在您的 Eclipse 工作区文件夹中。它们应该位于 bin 目录中。
创建一个createjar
文件夹并在其中创建一个classes
and a out
文件夹。将所有 .class 文件复制到classes
文件夹。还要在类文件夹中包含应用程序所需的所有 jar。
-
现在在命令行上进入createjar
目录并运行此命令:
"C:\path\to\jdk\jdk1.7.0_25\bin\javafxpackager.exe" -createjar -appclass package.MainClass -srcdir 类 -outdir out -outfile NameOfYourJar -classpath "" -v
这应该在中创建一个可运行的 jarout
目录。您将在下一步中需要它。
现在创建一个deploy
旁边的文件夹createjar
文件夹。
在 - 的里面deploy
文件夹 make 到其他目录dist
and packages
.
In the dist
文件夹复制上面新创建的 jar 以及它需要的所有依赖项/资源。
返回命令行(如果您曾经离开过它)并进入deploy
目录。从那里运行以下命令:
"C:\path\to\jdk\jdk1.7.0_25\bin\javafxpackager.exe" -deploy -native -outdir packages -outfile NameOfYourApp -srcdir dist -srcfiles NameOfYourJar.jar -appclass package.MainClass -name "Name of You Application" -title "Title of your application"
一旦完成它应该已经创建了部署应用程序所需的所有内容包括本地人.exe
文件在Windows平台上运行。这是独立的应用程序!为了能够运行它,你需要进入bundles\NameOfYourApp\app
并将您的应用程序所需的所有依赖项/资源粘贴到此处。
最后,双击 YourApp.exe,它甚至可以在没有安装 Java 的计算机上运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)