图标消失在与莱宁根做的uberjar

时间:2012-12-27 15:24:53

标签: swing clojure leiningen uberjar

我在Clojure中创建了一个时髦的应用程序,其中包含一些简单的Swing gui,其中包含一些带有图标的JButton,我希望我的非程序员朋友也可以使用它。

当我开始使用“lein run”时,它在我自己的计算机上运行良好。但是当我用lein uberjar'然后运行它,图标消失,让JButtons空白。

这些资源中的图标是.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

在做' java -jar'在打包的.jar上打印

file:/home/pelle/lein/foo/target/znuli-0.1.2-standalone.jar!/foo.png

这正是foo.png所在的位置(除了我不完全确定感叹号发生了什么),但它仍未在Swing gui中绘制。

我还尝试使用

显式指定project.clj中的resources文件夹
:resource-paths ["resources"]

但它什么都没改变。

所以基本上我的问题可归结为: 如何使用' lein uberjar'使用包含自定义png-image的JButton创建一个工作的hello-world.jar?

1 个答案:

答案 0 :(得分:2)

ImageIcon应该可以正常使用网址。放弃.getFile来电并直接使用clojure.java.io/resource的结果。