2012-09-02 14 views
7

He intentado todo el día convertir mi aplicación javafx en un archivo jar. Estoy usando Java 1.7 actualización 7.Artefacto Intellij Javafx: ¿cómo lo logras?

Oracle tiene some information, pero parece dispersa por todo el lugar. Intellij está casi haciendo el trabajo, pero me da el siguiente error:

java.lang.NoClassDefFoundError: javafx/application/Application 

que parece decir que tengo que decirle a Java donde el jfxrt.jar es ... Si añado este frasco a mi información de ruta de clases para la acumulación de manifiesto en intellij - Ctrl + Shift + alt + s -> Artefactos -> pestaña diseño de salida -> ruta de clase, entonces me sale otro error:

Could not find or load main class com.downloadpinterest.code.Main 

parece extraño tener que incluir en jfxrt.jar aunque mi ruta de clase ...

También traté de crear un script ant, pero siento que IntelliJ es 90 % de camino hasta allí, y solo necesito un poco de ayuda para descubrir por qué necesito incluir jfxrt.jar, y por qué no se encuentra mi clase Principal (supongo que necesito agregarlo a la ruta de clases de alguna manera) ?).

¿Alguien podría darme una pista de lo que está sucediendo? Antes tenía una guía básica que funcionaba bien, pero JavaFX parece estar complicando la vida.

Respuesta

4

Su suposición es correcta, debe agregar JavaFX a la ruta de clase.
Se encuentra en [JDK]/jre/lib/jfxrt.jar.

Proporcionar JavaFX en tiempo de ejecución, puede agrupar con su solicitud, se ilustra en esta Oracle guideo hacer Java 7 Actualización 6 un requisito para su aplicación, a continuación, añadir [JAVA_HOME]/lib/jfxrt.jar a la ruta de clase a la mayor brevedad posible de la aplicación.

La primera opción significa más trabajo para usted, pero se asegura de que todos los usuarios tengan la misma versión de la biblioteca, y también puede agrupar el JRE mientras lo hace. La segunda versión no ofrece esta certeza, pero es más fácil de realizar.

Como una variante de la segunda opción, si agrupar el JRE es realmente posible para usted, también puede agruparlo en su distribución y luego incluir un shell-scripts/batch-file/executable-wrapper para hacer su el programa lo usa. De esta manera, obtienes toda la certeza de la opción I con solo un aumento moderado en dificultad de la opción II.

+0

Me di cuenta cuando hago esto Intellij simplemente agrega una línea en el manifiesto jar que tiene el classpath (no agrupa jfxrt en mi jar). Parece que será un problema cuando otros descarguen mi programa y traten de usarlo; es decir, algunas personas tienen Mac, Linux, algunas ventanas y la ruta de jfxrt.jar será diferente para diferentes personas. ¿Sabes de todos modos para resolver este problema? –

+0

He actualizado la respuesta para cubrir eso. –

+0

Gracias, le he preguntado a Oracle si hay un ejemplo completo de hormiga en alguna parte, ya que solo logré llegar hasta aquí creando el script ant. ¡Enviaré uno si encuentro uno o logro crear uno! –

4

Tuve el mismo problema. Pero encontré esta entrada del blog: Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1 que muestra cómo hacerlo en IntelliJ 12.1

Al parecer IntelliJ tiene la capacidad de producir un artefacto especial "Aplicación JavaFX". Agrupa automáticamente todo lo que necesita dentro de su archivo jar.