【问题标题】:Icons disappearing in uberjar made with Leiningen用 Leiningen 制作的 uberjar 中的图标消失了
【发布时间】:2012-12-27 15:24:53
【问题描述】:

我用一个简单的 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?

【问题讨论】:

    标签: swing clojure leiningen uberjar


    【解决方案1】:

    ImageIcon 在 URL 上应该可以正常工作。放弃.getFile 调用,直接使用clojure.java.io/resource 的结果。

    【讨论】:

    • 准确!并感谢您的快速回答。奇怪的是,它只在编译后的 jar 中起作用。
    猜你喜欢
    • 2015-11-27
    • 2021-12-14
    • 2015-10-05
    • 1970-01-01
    • 2015-12-09
    • 2012-10-07
    • 2011-12-15
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多