2012-09-02 27 views
7

我一直試圖把我的javafx應用程序變成一個jar文件。我正在使用Java 1.7更新7.Intellij Javafx工件 - 您如何製作它?

Oracle有some information,但它似乎分散在各處。的IntelliJ幾乎做的工作,但我得到了以下錯誤:

java.lang.NoClassDefFoundError: javafx/application/Application 

這似乎是說,我需要告訴Java的其中jfxrt.jar是......如果我這個jar添加到我的類路徑信息的在的IntelliJ清單構建 - CTRL + SHIFT + ALT + S - >工件 - >輸出佈局選項卡 - >類路徑,然後我得到另一個錯誤:

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

我覺得奇怪,有包括jfxrt.jar在我的班級路徑雖然...

我試着創建一個螞蟻腳本以及,但我覺得像IntelliJ是90 %的方式 - 我只需要一點幫助,找出爲什麼我需要包括jfxrt.jar,爲什麼我的主類沒有被發現(我猜我需要將它添加到類路徑莫名其妙?)。

任何人都可以告訴我關於發生了什麼?我有一個基本的GUI之前工作得很好,但JavaFX似乎讓生活變得複雜!

回答

4

您的假設是正確的,您需要將JavaFX添加到類路徑中。
它位於[JDK]/jre/lib/jfxrt.jar

要在運行時提供的JavaFX,你可以用你的應用程序,在此Oracle guide 說明使Java 7更新6爲您的應用要求將其捆綁,然後在應用程序的儘早加入[JAVA_HOME]/lib/jfxrt.jar到classpath中。

第一個選項對您來說意味着更多的工作,但要確保所有用戶都具有相同版本的庫 - 並且您也可以捆綁JRE。 第二個版本不提供這種確定性,但更容易實現。

作爲第二個選項的變體 - 如果捆綁JRE實際上對您是可行的 - 您也可以將其捆綁到您的發行版中,然後包含shell腳本/批處理文件/可執行文件包裝器以使您的程序使用它。 通過這種方式,您可以從選項I中獲得所有確定性,而選項II的難度僅適度提高。

+0

我注意到當我這樣做時,Intellij只是在jar清單中添加了一行,它有類路徑(它不會在我的jar中捆綁jfxrt)。 這似乎是其他人下載我的程序並嘗試使用它時的問題 - 即有些人擁有mac,一些linux,一些窗口以及jfxrt.jar對於不同的人會有所不同。你知道解決這個問題嗎? –

+0

我已經更新了覆蓋該答案的答案。 –

+0

謝謝,我問過oracle是否有一個完整的ant示例,因爲我只能設法創建ant腳本。我會發佈一個,如果我找到一個或設法創建一個! –

4

我有同樣的問題。 但我發現這個博客文章:Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1,顯示如何在Intellij中執行它12.1

顯然,IntelliJ有能力生成一個特殊的「JavaFX應用程序」神器。它會自動打包你的jar文件中所需的所有東西。