1

Eclipseでビルドされ、osxappbundle-maven-pluginという名前のMavenプラグインを使用してバンドルされたJavaアプリケーションがMacにあります。アプリケーションのdmgファイルを解凍し、Appファイルを取得してハードドライブにコピーした後、次のコマンドを使用して、ターミナルからこのアプリを呼び出します。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/TEST2.mplx"アプリケーションが開きません新しいテストファイルを使用するアプリケーションですが、以前に開いたアプリケーションのウィンドウにフォーカスするだけです。
main関数は、呼び出すたびにウィンドウを再初期化するように記述しているので、main関数が再度呼び出されることはないと確信しています。(したがって、アプリケーションは完全に再初期化する必要があります)。

「open-n」オプションを使用して複数のアプリケーションを開くことはオプションではありません。

4

1 に答える 1

2

main関数が再度呼び出されないことは間違いありません。

はい、実行中のアプリケーションのインスタンスがすでに存在する場合、「open」コマンドは単に「openfiles」イベントを実行中のインスタンスに送信します。このイベントを受信するには、 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 に答える