Swing 用Leiningen制作的uberjar中消失的图标

Swing 用Leiningen制作的uberjar中消失的图标,swing,clojure,leiningen,uberjar,Swing,Clojure,Leiningen,Uberjar,我用Clojure制作了一个时髦的应用程序,它有一个简单的Swing gui,其中包含一些带有图标的JButton,我希望我的非程序员朋友也能使用它 当我用“lein run”启动自己的电脑时,它可以正常工作,但当我用“lein uberjar”创建一个包并运行它时,图标消失了,JButtons空白 图标位于项目根目录的“resources”文件夹中的.png,打包后在.jar中可见。要加载图标,请执行以下操作: (defn get-icon [icon] (.getFile (clojur

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

当我用“lein run”启动自己的电脑时,它可以正常工作,但当我用“lein uberjar”创建一个包并运行它时,图标消失了,JButtons空白

图标位于项目根目录的“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
file:/home/pelle/lein/foo/target/znuli-0.1.2-standalone.jar!/foo.png
当在打包的.jar上执行“java-jar”时,它会打印出来

/home/pelle/lein/foo/resources/foo.png
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图像的JButton的hello-world.jar,在URL上应该可以正常工作。放下
.getFile
调用,直接使用
clojure.java.io/resource
的结果。

马上!谢谢你的快速回答。奇怪的是,它只在编译过的jar中起作用。