1

我在 Mac 上有一个在 Eclipse 中构建的 java 应用程序,并使用名为 osxappbundle-maven-plugin 的 maven 插件捆绑。在我解压应用程序的dmg文件,获取一个应用程序文件并将其复制到我的硬盘驱动器后,我通过终端使用以下命令调用此应用程序: open -a "/Full/Path/To/App/Match Player.app" --args "/Full/Path/To/File/TEST 1.mplx"

这将正确打开应用程序。
但是,在我执行以下命令后: open -a "/Full/Path/To/App/Match Player.app" --args "/Full/Path/To/File/TEST 2.mplx" 我的应用程序无法打开具有新测试文件的应用程序,但只关注先前打开的应用程序的窗口。
我很确定不会再次调用 main 函数,因为我编写了 main 函数,因此在每次调用时,它都会重新初始化窗口。(因此应用程序应该完全重新初始化)。

不能使用“open -n”选项打开多个应用程序。

4

1 回答 1

2

我很确定不会再次调用 main 函数

是的,当已经有一个应用程序实例正在运行时,“打开”命令只是向正在运行的实例发送一个“打开文件”事件。您需要注册一个OpenFilesHandler来接收此事件,并且您可以main从处理程序内部再次调用。

import com.apple.eawt.*;

public class MyMainClass {
  private static boolean listenerRegistered = false;

  public static void main(String[] args) throws Exception {
    if(!listenerRegistered) {
      Application.getApplication().setOpenFileHandler(new OpenFilesHandler() {
        public void openFiles(AppEvent.OpenFilesEvent evt) {
          List<String> filenames = new ArrayList<String>();
          for(File f : evt.getFiles()) {
            filenames.add(f.getAbsolutePath());
          }
          MyMainClass.main(filenames.toArray(new String[filenames.size()]));
        }
      });
      listenerRegistered = true;
    }

    // rest of main goes here
  }
}

现在open -a "/Full/Path/To/App/Match Player.app" "/Full/Path/To/File/TEST 1.mplx"(没有--args)应该做正确的事情。

于 2013-03-27T14:26:31.473 回答