Nie można wdrożyć aplikacji JavaFX z zewnętrznymi bibliotekami w JAR

Opracowuję aplikację JavaFX w Eclipse. Aplikacja ma zewnętrzne biblioteki, takie jak log4j i inne, i działa doskonale z Eclipse. Próbowałem wdrożyć go z Eclipse jako jar Runnable za pomocą wbudowanej funkcji Eclipse i działa on dobrze na niektórych komputerach, podczas gdy na innych dałby mi niejasny błąd Niezdefiniowanego łącza. Po wykopaniu wydaje się, że JavaFX musi być specjalnie spakowany albo za pomocą skryptu ANT, albo poprzezjavafxpackager podanie.

Przez całe życie wydaje mi się, że nie mogę wdrożyć uruchamianego słoika za pomocą żadnej z tych metod. Próbując jednej z tych metod, otrzymuję wyjątek. Rzeczy, które próbowałem:

Zbuduj aplikację JavaFX za pomocą skryptu ANT, poniżej znajduje się fragment odpowiednich części skryptu kompilacji

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

Kompilując / generując słoik za pomocą skryptu ant, otrzymuję okno na pół sekundy i „Wyjątek w metodzie uruchamiania aplikacji” w konsoli, bez śledzenia stosu. Próbowałem uruchomić java za pomocą-XX:-OmitStackTraceInFastThrow flag, ale nadal nie da mi śladu stosu.

Biegnąc przezjavafxpackager daje następujący błąd:

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

questionAnswers(3)

yourAnswerToTheQuestion