一次打开多个相同的 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Mac 应用程序包能够启动多个实例

如何在 Mac 上启动多个 MonoDevelop 实例?

在 Mac 中启动多个应用程序实例

如何在 Mac 系统上同时打开多个 MediaInfo 应用程序实例?

Mac 同一应用打开两个,切换快捷键

Mac版网络调试助手打开多个页面