4

私は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を作成するにはどうすればよいですか。

4

1 に答える 1

2

ImageIconURLで正常に動作するはずです。通話.getFileを切断し、の結果をclojure.java.io/resource直接使用します。

于 2012-12-27T16:30:37.293 に答える