3

java swingほとんどの場合、システム トレイで実行されるアプリケーションがあります。ユーザーは を使用しTray Menuて、いくつかのアクションを実行できます。それらのアクションの 1 つは、アプリ ウィンドウを表示することです。私が抱えている問題は、OS X での使いやすさです。

Windowsでは、ユーザーがアプリ ウィンドウを表示し、後で別のアプリに切り替えると、タスクバーを使用してアプリケーションに戻ることができます。ただし、OS X では、アプリにメニューがなく、リストにも表示されないモードでアプリが実行されますCommand + Tab

__LSUIElementでtrueに設定されていますinfo.plist file

したがって、私の問題は、ユーザーがアプリ ウィンドウを開いて後で別のアプリに切り替えた場合、ウィンドウ自体 (他の多くのウィンドウの背後にある可能性がある) をクリックしない限り、元に戻すことができないことです。最も簡単な方法は、ユーザーがトレイ アイコンを使用してウィンドウを再度開くことですが、ウィンドウが既に開いているため、前面に表示できません。

では、他のアプリケーションからフォーカスを外してウィンドウを前面に移動するにはどうすればよいですか?

編集:

私の問題は、「エージェントとして実行されているアプリケーション」を取得することではありません。私はすでにそれを機能させています。私が抱えている問題は、作成時にプログラムウィンドウを一番上に表示することです。私はJavaでこれを行うことができません。

4

3 に答える 3

1

以下の質問への回答で提供されたコードはトリックを行いました

窓を前面に出す方法は?

于 2010-08-16T06:46:34.463 に答える
1

同じことをしようと多くの努力を重ねた結果、次の方法が私にとって最も簡単な解決策であることがわかりました。

try {
    String[] cmd = new String[2];
    cmd[0] = "open";
    cmd[1] = "/Applications/MyApp.app";

    Runtime.getRuntime().exec(cmd);
}
catch(Exception ex) {
    //ignore since there's nothing else that can be done
}

基本的に、Mac OS X で「open」コマンドを使用して、トレイ アイコンを作成した Java プログラムをラップするアプリを開く JVM を介して別のプロセスを実行することにしました。再度開くように指示すると、ウィンドウは既に実行されているため、前面に表示されます。

于 2015-12-05T00:04:20.267 に答える
1

ユーザーがメニュー バーのアイコンをクリックしたとき (またはウィンドウを開いたとき) にactivateIgnoringOtherApps:、パラメーターを使用して呼び出すことができます。trueただし、Java から Cocoa に接続する必要があります。

于 2010-07-29T21:10:44.343 に答える