一次打开多个相同的 Mac 应用程序
Posted
技术标签:
【中文标题】一次打开多个相同的 Mac 应用程序【英文标题】:Opening more than one of the same Mac Application at once 【发布时间】:2010-09-12 02:36:01 【问题描述】:我正在用 Java 开发一个 Mac 应用程序,它可以登录到我们客户的任何一个数据库。我的用户希望运行该程序的多个副本,以便他们可以同时登录多个客户端,而不是注销并重新登录。
如何允许用户一次打开我的应用的多个副本?
我使用 Eclipse 进行开发,使用 Jarbundler 制作应用程序。
编辑:更重要的是,有没有办法在代码库中这样做,而不是让我的用户在他们的系统上做一些时髦的事情?我宁愿只给他们一个“打开新窗口”菜单项,然后让他们在终端中输入内容。
【问题讨论】:
这种行为破坏了 OS X UI 模型。为什么不让他们打开连接到不同数据库的多个窗口? 是的,这看起来是最好的选择。谢谢^_^ 【参考方案1】:您可能已经获得了足够多不想听到的代码,但您真的不应该启动同一个应用程序的两个实例。你发现它如此困难是有原因的,那是因为 Apple 不希望你这样做。
OSX 的做法是在 XCode 中使用 Cocoa Document-based Application 模板。 Apple Documentation: choosing a project.
这是用户非常习惯的事情,而且效果很好。 FTP 程序、IRC 客户端和许多其他类型已经使用不同的“文档”窗口来指向不同的服务器或通道。指向不同的数据库本质上没有什么不同。
根据您编写的代码量以及应用程序的设计方式,如果不重新开始,这几乎是不可能实现的。但是,在设计阶段遇到此问题的开发人员绝对应该听取 Apple 的建议。
【讨论】:
【参考方案2】:从终端,我可以运行
open -n -a appName.app
然后从Applescript,我可以运行
tell application "Terminal"
activaate
do script "open -n -a appName.app"
end tell
然后,我可以从 Java 执行该脚本。然后,我可以将该 Java 代码填充到一个动作中。然后,将该操作填充到显示“打开新窗口”的菜单项中。
这就是我目前要做的。现在我只需要获取 appName。
【讨论】:
【参考方案3】:从终端(或在脚本包装器中):
/Applications/TextEdit.app/Contents/MacOS/TextEdit &
类似的东西应该适合你。
在 Java 中执行此操作:
String[] cmd = "/bin/sh", "-c", "[shell commmand goes here]" ;
Process p = Runtime.getRuntime().exec (cmd);
【讨论】:
【参考方案4】:如果你是在swing中开发它,你应该能够实例化顶部的Frame来创建一个新的窗口。
【讨论】:
以上是关于一次打开多个相同的 Mac 应用程序的主要内容,如果未能解决你的问题,请参考以下文章