私はClojureで、いくつかのアイコンが付いたいくつかのJButtonを含む単純なSwing guiを使用してファンキーなアプリケーションを作成しました。また、プログラマー以外の友人にも使用できるようにしたいと思います。
「leinrun」で起動すると、自分のコンピューターではすべて正常に動作しますが、「lein uberjar」でパッケージを作成して実行すると、アイコンが消えてJButtonが空白のままになります。
アイコンは、プロジェクトルートの「resources」フォルダーにある.pngであり、パッケージ化後に.jarに表示されます。アイコンをロードするには、次のようにします。
(defn get-icon [icon]
(.getFile (clojure.java.io/resource icon)))
(def some-button (JButton. (ImageIcon. (get-icon "foo.png"))))
私は、何が起こっているのかを確認するために、小さな印刷ステートメントを入れようとしました:
(println (get-icon "foo.png"))
'lein run'を実行すると、次のように出力されます。
/home/pelle/lein/foo/resources/foo.png
パッケージ化された.jarで「java-jar」を実行すると、次のように出力されます。
file:/home/pelle/lein/foo/target/znuli-0.1.2-standalone.jar!/foo.png
これはまさにfoo.pngが存在する場所です(感嘆符で何が起こっているのか完全にはわかりませんが)が、SwingGUIにはまだ描画されていません。
また、project.cljのresourcesフォルダーを明示的に指定してみました。
:resource-paths ["resources"]
しかし、それは何も変わりません。
つまり、基本的に私の質問は次のように要約できます。「lein uberjar」を使用して、カスタムpng画像を含むJButtonを使用して動作するhello-world.jarを作成するにはどうすればよいですか。