JavaFX-Anwendung kann nicht mit externen Bibliotheken in einer JAR bereitgestellt werden

Ich entwickle eine JavaFX-Anwendung in Eclipse. Die App verfügt über externe Bibliotheken wie log4j und andere und läuft perfekt in Eclipse. Ich habe versucht, es von Eclipse über die integrierte Eclipse-Funktion als ausführbare JAR-Datei bereitzustellen, und es läuft auf einigen Computern einwandfrei, während es mir auf anderen einen undefinierten Link-Fehler anzeigt. Nach dem Stöbern scheint es, dass JavaFX speziell gepackt werden muss, entweder durch ein ANT-Skript oder durch dasjavafxpackager Anwendung.

Für mein ganzes Leben kann ich mit keiner dieser Methoden ein lauffähiges Gefäß einsetzen. Wenn ich eine dieser Methoden versuche, erhalte ich eine Ausnahme. Dinge, die ich versucht habe:

Erstellen Sie die JavaFX-Anwendung mit einem ANT-Skript. Nachfolgend finden Sie einen Ausschnitt der relevanten Teile des Build-Skripts

<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>

Beim Kompilieren / Generieren der JAR-Datei über das Ant-Skript wird für eine halbe Sekunde ein Popup-Fenster und in der Konsole die Meldung "Ausnahme in der Startmethode der Anwendung" ohne Stack-Trace angezeigt. Ich habe versucht, Java mit dem auszuführen-XX:-OmitStackTraceInFastThrow flag, aber es gibt mir immer noch keinen Stack-Trace.

Durchrennenjavafxpackager gibt den folgenden Fehler aus:

RenderJob.run: interne Ausnahme java.lang.UnsatisfiedLinkError: com.sun.prism.d3d.D3DContext.nSetBlendEnabled (JZ Z) I bei com.sun.prism.d3d.D3DContext.nSetBlendEnabled (native Methode) bei com.sun.prism .d3d.D3DContext.initState (D3DContext.java:84) at com.sun.prism.d3d.D3DResourceFactory. (D3DResourceFactory.java:5 7) at com.sun.prism.d3d.D3DPipeline.createResourceFactory (D3DPipeline.java: 147 ) unter com.sun.prism.d3d.D3DPipeline.getD3DResourceFactory (D3DPipeline.java: 153) unter com.sun.prism.d3d.D3DPipeline.findDefaultResourceFactory (D3DPipeline. java: 179) unter com.sun.prism.d3d.D3DPipeline. getDefaultResourceFactory (D3DPipeline.j ava: 201) unter com.sun.prism.GraphicsPipeline.getDefaultResourceFactory (GraphicsPipe line.java:97) unter com.sun.javafx.tk.quantum.QuantumRenderer $ 3.run (QuantumRenderer.java: 143) java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:47 1) bei java.util.concurrent.FutureTask.runAndReset (FutureTask.java:304) bei com.sun.prism.render.RenderJob.run (RenderJob .java: 37 ) unter java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1145) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor .java: 615) bei com.sun.javafx.tk.quantum.QuantumRenderer $ PipelineRunnable.run (Quantu mRenderer.java:98) bei java. lang.Thread.run (Thread.java:724)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage