Clojure seesaw 应用程序:如何从 "main" 更改菜单栏标题

Clojure seesaw application: How to change menubar title from "main"

在我用 clojure 编写的独立应用程序中,使用 seesaw 创建 gui,运行在 OSX 下,我得到一个菜单栏标题 "main"。这似乎是基于跷跷板的程序的默认设置。我在任何可用的教程示例中都看到了它。这是我的样子:

我试过重命名 (-main) 函数。上图是在 (-main) 重命名为 (-soulflyer) 的情况下拍摄的,因此它不会从中选择标题。这是代码片段:

(defn -soulflyer [& args]
  (invoke-later
   (let [f                (make-frame)
         details          (select f [:#details])
         image-pane       (select f [:#image])
         keyword-tree     (select f [:#tree])
8<---snip

注意这是来自 repl 的 运行,独立版本需要有一个 -main 函数。

这是 (make-frame) 函数的一部分:

(frame
 :title "Keyword Explorer"
 :size [1400 :by 800]
 :menubar
 (menubar :items
          [(menu :text "File" :items [])
           (menu :text "Edit" :items [])])
 :content
8<---snip

所以 :title 值只影响 window 中的标题,而不影响菜单栏中的标题。

有什么方法可以从 clojure 改变这个吗?

编辑:project.clj 文件可能有用(其余代码位于 https://github.com/soulflyer/find-pics):

(defproject find-pics "0.1.0-SNAPSHOT"
  :description "Search for images containing specified keywords"
  :url "http://githube.com/soulflyer/find-pics"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [seesaw "1.4.5"]
                 [image-lib "0.1.0-SNAPSHOT"]
                 [com.novemberain/monger "3.0.1"]
                 [org.clojure/tools.cli "0.3.3"]]
  :main find-pics.core
  :bin {:name "find-pics"
    :bin-path "~/bin"})

简而言之,您应该在 project.clj 文件中添加 :jvm-opts ["-Xdock:name=YOUR_APP_NAME"]

Java Mac OS 中的应用程序 X 有一个应用程序菜单。默认情况下,此应用程序菜单包含主要 class 的全名作为标题。如果你想改变这个,你可以像这样传递 -Xdock:name VM 参数。

java -Xdock:name=YOUR_APP_NAME ...

好像clojure函数编译成了Javaclass。这就是应用程序菜单显示为 main 的原因,这与 main 功能名称相同。由于您无法更改函数名称,因此您应该将 -Xdock:name=YOUR_APP_NAME 添加到 :jvm-opts.

更多详细信息,您可以阅读以下文档:

OS X Integration for Java