4

我用一个简单的 Swing gui 在 Clojure 中制作了一个时髦的应用程序,其中包含一些带有一些图标的 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

并且在打包的 .jar 上执行“java -jar”时会打印

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

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

我也尝试过明确指定 project.clj 中的资源文件夹

:resource-paths ["resources"]

但它什么也没改变。

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

4

1 回答 1

2

ImageIcon应该可以在 URL 上正常工作。挂断.getFile电话,直接使用结果clojure.java.io/resource

于 2012-12-27T16:30:37.293 回答