swing – 用Leiningen制作的uberjar中的图标消失了

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

当我用’lein run’启动它时,它在我自己的计算机上运行良好但是当我使用’lein uberjar’创建一个包并运行它时,图标已经消失,JButton留空了.

图标是.png位于项目根目录的“resources”文件夹中,并且在打包后在.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所在的位置(除了我不完全确定感叹号发生了什么),但它仍未在Swing gui中绘制.

我还试过用project明确指定project.clj中的resources文件夹

:resource-paths ["resources"]

但它什么都没改变.

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

最佳答案 ImageIcon应该可以在URL上正常工作.删除.getFile调用,直接使用clojure.java.io/resource的结果.

点赞