Невозможно развернуть приложение JavaFX с внешними библиотеками в JAR
Я разрабатываю приложение JavaFX в Eclipse. Приложение имеет внешние библиотеки, такие как log4j и другие, и отлично работает с Eclipse. Я попытался развернуть его из Eclipse в качестве jar-файла Runnable с помощью встроенной функции Eclipse, и он хорошо работает на некоторых компьютерах, в то время как на других это может привести к неясной ошибке Undefined Link. После копания кажется, что JavaFX должен быть специально упакован либо через скрипт ANT, либо черезjavafxpackager
применение.
На мой взгляд, я не могу развернуть работающую банку с помощью любого из этих методов. Пробуя любой из этих методов, я получаю исключение. Вещи, которые я пробовал:
Создайте приложение JavaFX с помощью сценария ANT, ниже приведен фрагмент соответствующих частей сценария сборки
<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>
Компилируя / генерируя jar с помощью скрипта ant, я получаю всплывающее окно на полсекунды и «Исключение в методе запуска приложения» в консоли без трассировки стека. Я пытался запустить 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.s .d3d.D3DContext.initState (D3DContext.java:84) в com.sun.prism.d3d.D3DResourceFactory. (D3DResourceFactory.java:5 7) в com.sun.prism.d3d.D3DPipeline.createResourceFactoryj (D3DPipe7.jp: ) на com.sun.prism.d3d.D3DPipeline.getD3DResourceFactory (D3DPipeline.java: 153) на com.sun.prism.d3d.D3DPipeline.findDefaultResourceFactory (D3DPipeline. java: 179) на com.sun.prism.d3d.D3DPipeline. getDefaultResourceFactory (D3DPipeline.j ava: 201) по адресу com.sun.prism.GraphicsPipeline.getDefaultResourceFactory (GraphicsPipe line.java:97) по адресу com.sun.javafx.tk.quantum.QuantumRenderer $ 3.run (QuantumRendej): 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. Java: 1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor .java: 615) на com.sun.javafx.tk.quantum.QuantumRenderer $ PipelineRunnable.run (Quantu mRenderer.java:98) lang.Thread.run (Thread.java:724)